domain-knowledge-kit 0.2.15 → 0.2.19
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 +24 -1
- package/dist/cli.js.map +1 -1
- package/dist/features/agent/commands/init.d.ts +90 -1
- package/dist/features/agent/commands/init.d.ts.map +1 -1
- package/dist/features/agent/commands/init.js +328 -32
- 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 +105 -8
- package/dist/features/agent/commands/prime.js.map +1 -1
- package/dist/features/agent/commands/update.d.ts +27 -0
- package/dist/features/agent/commands/update.d.ts.map +1 -0
- package/dist/features/agent/commands/update.js +316 -0
- package/dist/features/agent/commands/update.js.map +1 -0
- package/dist/features/agent/dkk-artifacts.d.ts +76 -0
- package/dist/features/agent/dkk-artifacts.d.ts.map +1 -0
- package/dist/features/agent/dkk-artifacts.js +328 -0
- package/dist/features/agent/dkk-artifacts.js.map +1 -0
- package/dist/features/agent/install-mode.d.ts +34 -0
- package/dist/features/agent/install-mode.d.ts.map +1 -0
- package/dist/features/agent/install-mode.js +78 -0
- package/dist/features/agent/install-mode.js.map +1 -0
- package/dist/features/agent/mcp-register.d.ts +20 -0
- package/dist/features/agent/mcp-register.d.ts.map +1 -0
- package/dist/features/agent/mcp-register.js +116 -0
- package/dist/features/agent/mcp-register.js.map +1 -0
- package/dist/features/agent/settings-prune.d.ts +29 -0
- package/dist/features/agent/settings-prune.d.ts.map +1 -0
- package/dist/features/agent/settings-prune.js +70 -0
- package/dist/features/agent/settings-prune.js.map +1 -0
- package/dist/features/agent/tests/settings-prune.test.d.ts +2 -0
- package/dist/features/agent/tests/settings-prune.test.d.ts.map +1 -0
- package/dist/features/agent/tests/settings-prune.test.js +118 -0
- package/dist/features/agent/tests/settings-prune.test.js.map +1 -0
- 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/new-domain.d.ts +22 -0
- package/dist/features/scaffold/commands/new-domain.d.ts.map +1 -1
- package/dist/features/scaffold/commands/new-domain.js +44 -28
- package/dist/features/scaffold/commands/new-domain.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/dist/version.d.ts +4 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +15 -0
- package/dist/version.js.map +1 -0
- package/package.json +8 -5
- 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 +68 -0
- package/tools/dkk/claude/hooks/pre-edit-block-generated.mjs +39 -0
- package/tools/dkk/claude/hooks/session-start-prime.mjs +20 -0
- package/tools/dkk/claude/hooks/stop-validate.mjs +67 -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,182 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Reference parsing — single source of truth for DKK item-id grammar.
|
|
3
|
+
*
|
|
4
|
+
* IDs identify domain items, actors, ADRs, flows, and contexts. The
|
|
5
|
+
* grammar is additive: an optional `<service>:` prefix may be attached
|
|
6
|
+
* to any id to federate it across repos. Bare refs stay local-only.
|
|
7
|
+
*
|
|
8
|
+
* Forms:
|
|
9
|
+
* <ctx>.<Name> → context-scoped item
|
|
10
|
+
* actor.<Name> → actor
|
|
11
|
+
* adr-NNNN → ADR
|
|
12
|
+
* flow.<Name> → cross-context flow
|
|
13
|
+
* context.<name> → bounded context itself
|
|
14
|
+
* <service>:<any of above> → federated form
|
|
15
|
+
*/
|
|
16
|
+
/** Kebab-case service / context identifier. */
|
|
17
|
+
const KEBAB = /^[a-z][a-z0-9-]*$/;
|
|
18
|
+
/** PascalCase item name (events, commands, etc.). */
|
|
19
|
+
const PASCAL = /^[A-Za-z][A-Za-z0-9]*$/;
|
|
20
|
+
/** ADR id pattern (`adr-NNNN`). */
|
|
21
|
+
const ADR_ID = /^adr-\d{4}$/;
|
|
22
|
+
/**
|
|
23
|
+
* Parse a ref string into its structured form. Returns `null` for
|
|
24
|
+
* inputs that do not match any of the five shapes.
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* parseRef("ordering.OrderPlaced")
|
|
28
|
+
* // → { kind: "item", context: "ordering", name: "OrderPlaced" }
|
|
29
|
+
*
|
|
30
|
+
* parseRef("payments:billing.PaymentCaptured")
|
|
31
|
+
* // → { kind: "item", service: "payments", context: "billing", name: "PaymentCaptured" }
|
|
32
|
+
*
|
|
33
|
+
* parseRef("adr-0001")
|
|
34
|
+
* // → { kind: "adr", id: "adr-0001" }
|
|
35
|
+
*
|
|
36
|
+
* parseRef("ordering:adr-0007")
|
|
37
|
+
* // → { kind: "adr", service: "ordering", id: "adr-0007" }
|
|
38
|
+
*/
|
|
39
|
+
export function parseRef(s) {
|
|
40
|
+
if (typeof s !== "string" || s.length === 0)
|
|
41
|
+
return null;
|
|
42
|
+
// Peel off optional service prefix.
|
|
43
|
+
let service;
|
|
44
|
+
let body = s;
|
|
45
|
+
const colon = s.indexOf(":");
|
|
46
|
+
if (colon > 0) {
|
|
47
|
+
const svc = s.slice(0, colon);
|
|
48
|
+
if (!KEBAB.test(svc))
|
|
49
|
+
return null;
|
|
50
|
+
service = svc;
|
|
51
|
+
body = s.slice(colon + 1);
|
|
52
|
+
if (body.length === 0)
|
|
53
|
+
return null;
|
|
54
|
+
}
|
|
55
|
+
// ADR: "adr-NNNN"
|
|
56
|
+
if (ADR_ID.test(body)) {
|
|
57
|
+
return { kind: "adr", service, id: body };
|
|
58
|
+
}
|
|
59
|
+
// Special-prefix forms: "actor.X", "flow.X", "context.X"
|
|
60
|
+
if (body.startsWith("actor.")) {
|
|
61
|
+
const name = body.slice("actor.".length);
|
|
62
|
+
if (!PASCAL.test(name))
|
|
63
|
+
return null;
|
|
64
|
+
return { kind: "actor", service, name };
|
|
65
|
+
}
|
|
66
|
+
if (body.startsWith("flow.")) {
|
|
67
|
+
const name = body.slice("flow.".length);
|
|
68
|
+
if (name.length === 0)
|
|
69
|
+
return null;
|
|
70
|
+
return { kind: "flow", service, name };
|
|
71
|
+
}
|
|
72
|
+
if (body.startsWith("context.")) {
|
|
73
|
+
const name = body.slice("context.".length);
|
|
74
|
+
if (!KEBAB.test(name))
|
|
75
|
+
return null;
|
|
76
|
+
return { kind: "context", service, name };
|
|
77
|
+
}
|
|
78
|
+
// Generic context-scoped item: "<ctx>.<Name>"
|
|
79
|
+
const dot = body.indexOf(".");
|
|
80
|
+
if (dot > 0) {
|
|
81
|
+
const ctx = body.slice(0, dot);
|
|
82
|
+
const name = body.slice(dot + 1);
|
|
83
|
+
if (KEBAB.test(ctx) && PASCAL.test(name)) {
|
|
84
|
+
return { kind: "item", service, context: ctx, name };
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
return null;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Qualify a bare-or-federated item ref into a canonical id form.
|
|
91
|
+
*
|
|
92
|
+
* Three input shapes are handled:
|
|
93
|
+
* - Author-qualified federated form (`<svc>:<ctx>.<Name>`) → kept as-is,
|
|
94
|
+
* marked foreign whenever it differs from `walkPrefix`.
|
|
95
|
+
* - Author-qualified context form (`<ctx>.<Name>`, no service) →
|
|
96
|
+
* gets `walkPrefix` applied so peer walks namespace it correctly.
|
|
97
|
+
* - Bare PascalCase name (`Name`) → resolved as a name in
|
|
98
|
+
* `currentContext`, then prefixed with `walkPrefix`.
|
|
99
|
+
*
|
|
100
|
+
* `walkPrefix` is `""` for local walks and `"<peerName>:"` for peer
|
|
101
|
+
* walks. The function leaves any already-prefixed ref untouched so
|
|
102
|
+
* a peer's own author-written federated refs survive the prefix pass.
|
|
103
|
+
*/
|
|
104
|
+
export function qualifyItemRef(raw, walkPrefix, currentContext) {
|
|
105
|
+
const parsed = parseRef(raw);
|
|
106
|
+
if (parsed?.kind === "item" && parsed.service) {
|
|
107
|
+
// Author-qualified federated form: `<svc>:<ctx>.<Name>`.
|
|
108
|
+
return {
|
|
109
|
+
id: `${parsed.service}:${parsed.context}.${parsed.name}`,
|
|
110
|
+
context: parsed.context,
|
|
111
|
+
name: parsed.name,
|
|
112
|
+
isForeign: walkPrefix !== `${parsed.service}:`,
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
if (parsed?.kind === "item") {
|
|
116
|
+
// Author-qualified context form (`<ctx>.<Name>`, no service).
|
|
117
|
+
return {
|
|
118
|
+
id: `${walkPrefix}${parsed.context}.${parsed.name}`,
|
|
119
|
+
context: parsed.context,
|
|
120
|
+
name: parsed.name,
|
|
121
|
+
isForeign: false,
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
// Bare name fallback (`OrderPlaced` in YAML inter-item refs such as
|
|
125
|
+
// raised_by, handles.commands, when.events, …).
|
|
126
|
+
if (raw.includes(":")) {
|
|
127
|
+
// Author wrote a colon but it didn't parse as `<svc>:<ctx>.<Name>`.
|
|
128
|
+
// Leave as-is so the caller can surface a clear "malformed" error
|
|
129
|
+
// elsewhere; treat as foreign so the prefix isn't applied.
|
|
130
|
+
return { id: raw, name: raw, isForeign: true };
|
|
131
|
+
}
|
|
132
|
+
return {
|
|
133
|
+
id: `${walkPrefix}${currentContext}.${raw}`,
|
|
134
|
+
context: currentContext,
|
|
135
|
+
name: raw,
|
|
136
|
+
isForeign: false,
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Qualify a bare-or-federated actor ref. Actor ids use the
|
|
141
|
+
* `actor.<Name>` form (no context). Federated form is
|
|
142
|
+
* `<service>:actor.<Name>`. Bare YAML form is just `<Name>`.
|
|
143
|
+
*/
|
|
144
|
+
export function qualifyActorRef(raw, walkPrefix) {
|
|
145
|
+
const parsed = parseRef(raw);
|
|
146
|
+
if (parsed?.kind === "actor" && parsed.service) {
|
|
147
|
+
return {
|
|
148
|
+
id: `${parsed.service}:actor.${parsed.name}`,
|
|
149
|
+
name: parsed.name,
|
|
150
|
+
isForeign: walkPrefix !== `${parsed.service}:`,
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
if (parsed?.kind === "actor") {
|
|
154
|
+
return {
|
|
155
|
+
id: `${walkPrefix}actor.${parsed.name}`,
|
|
156
|
+
name: parsed.name,
|
|
157
|
+
isForeign: false,
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
// Bare PascalCase actor name (the dominant case in YAML).
|
|
161
|
+
if (raw.includes(":")) {
|
|
162
|
+
return { id: raw, name: raw, isForeign: true };
|
|
163
|
+
}
|
|
164
|
+
return { id: `${walkPrefix}actor.${raw}`, name: raw, isForeign: false };
|
|
165
|
+
}
|
|
166
|
+
/** Serialize a {@link ParsedRef} back into its canonical string form. */
|
|
167
|
+
export function formatRef(r) {
|
|
168
|
+
const prefix = r.service ? `${r.service}:` : "";
|
|
169
|
+
switch (r.kind) {
|
|
170
|
+
case "item":
|
|
171
|
+
return `${prefix}${r.context}.${r.name}`;
|
|
172
|
+
case "adr":
|
|
173
|
+
return `${prefix}${r.id}`;
|
|
174
|
+
case "actor":
|
|
175
|
+
return `${prefix}actor.${r.name}`;
|
|
176
|
+
case "flow":
|
|
177
|
+
return `${prefix}flow.${r.name}`;
|
|
178
|
+
case "context":
|
|
179
|
+
return `${prefix}context.${r.name}`;
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
//# sourceMappingURL=refs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"refs.js","sourceRoot":"","sources":["../../src/shared/refs.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { ServiceManifest } from "./types/federation.js";
|
|
2
|
+
/**
|
|
3
|
+
* Load `.dkk/service.yml` from the given root (or auto-detected root).
|
|
4
|
+
* Returns the parsed manifest, or `null` if the file does not exist.
|
|
5
|
+
*
|
|
6
|
+
* Throws when the file exists but does not conform to
|
|
7
|
+
* `service.schema.json` — the message includes Ajv's error list so
|
|
8
|
+
* the user can fix the manifest directly.
|
|
9
|
+
*/
|
|
10
|
+
export declare function loadServiceId(root?: string): ServiceManifest | null;
|
|
11
|
+
//# sourceMappingURL=service-id.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service-id.d.ts","sourceRoot":"","sources":["../../src/shared/service-id.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AA0B7D;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI,CAkBnE"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Service identity loader.
|
|
3
|
+
*
|
|
4
|
+
* Reads `.dkk/service.yml` (if present) and returns the parsed
|
|
5
|
+
* `ServiceManifest`. Returns `null` for legacy repos that haven't
|
|
6
|
+
* adopted federation — the rest of the loader/validator stack treats
|
|
7
|
+
* `model.service === undefined` as "unfederated, behave as before".
|
|
8
|
+
*
|
|
9
|
+
* Validates against `tools/dkk/schema/service.schema.json` at load
|
|
10
|
+
* time so a malformed manifest produces a clean error up front
|
|
11
|
+
* instead of crashing later in the validator/CLI.
|
|
12
|
+
*/
|
|
13
|
+
import { readFileSync, existsSync } from "node:fs";
|
|
14
|
+
import { createRequire } from "node:module";
|
|
15
|
+
import { join } from "node:path";
|
|
16
|
+
import { parseYaml } from "./yaml.js";
|
|
17
|
+
import { serviceFile, schemaDir } from "./paths.js";
|
|
18
|
+
// ajv is a CJS package — use createRequire for ESM interop. Matches
|
|
19
|
+
// the pattern used in validator.ts and tests.
|
|
20
|
+
const require = createRequire(import.meta.url);
|
|
21
|
+
const Ajv = require("ajv").default;
|
|
22
|
+
const addFormats = require("ajv-formats").default;
|
|
23
|
+
/** Cached Ajv instance with all DKK schemas loaded. */
|
|
24
|
+
let cachedAjv = null;
|
|
25
|
+
function getAjv() {
|
|
26
|
+
if (cachedAjv)
|
|
27
|
+
return cachedAjv;
|
|
28
|
+
const ajv = new Ajv({ allErrors: true, strict: true });
|
|
29
|
+
addFormats(ajv);
|
|
30
|
+
// Load all schemas so cross-refs ($ref) resolve.
|
|
31
|
+
const dir = schemaDir();
|
|
32
|
+
const fs = require("node:fs");
|
|
33
|
+
for (const f of fs.readdirSync(dir).filter((n) => n.endsWith(".schema.json"))) {
|
|
34
|
+
const schema = JSON.parse(fs.readFileSync(join(dir, f), "utf-8"));
|
|
35
|
+
ajv.addSchema(schema, schema.$id);
|
|
36
|
+
}
|
|
37
|
+
cachedAjv = ajv;
|
|
38
|
+
return ajv;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Load `.dkk/service.yml` from the given root (or auto-detected root).
|
|
42
|
+
* Returns the parsed manifest, or `null` if the file does not exist.
|
|
43
|
+
*
|
|
44
|
+
* Throws when the file exists but does not conform to
|
|
45
|
+
* `service.schema.json` — the message includes Ajv's error list so
|
|
46
|
+
* the user can fix the manifest directly.
|
|
47
|
+
*/
|
|
48
|
+
export function loadServiceId(root) {
|
|
49
|
+
const path = serviceFile(root);
|
|
50
|
+
if (!existsSync(path))
|
|
51
|
+
return null;
|
|
52
|
+
const text = readFileSync(path, "utf-8");
|
|
53
|
+
const parsed = parseYaml(text);
|
|
54
|
+
const ajv = getAjv();
|
|
55
|
+
const valid = ajv.validate("service.schema.json", parsed);
|
|
56
|
+
if (!valid) {
|
|
57
|
+
const details = (ajv.errors ?? [])
|
|
58
|
+
.map((e) => ` - ${e.instancePath || "/"}: ${e.message ?? "invalid"}`)
|
|
59
|
+
.join("\n");
|
|
60
|
+
throw new Error(`Invalid ${path}:\n${details}\n\nExpected shape: { name: kebab-case, exports: string[], description?: string }`);
|
|
61
|
+
}
|
|
62
|
+
return parsed;
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=service-id.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service-id.js","sourceRoot":"","sources":["../../src/shared/service-id.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAGpD,oEAAoE;AACpE,8CAA8C;AAC9C,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,OAAuC,CAAC;AACnE,MAAM,UAAU,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC,OAA+C,CAAC;AAE1F,uDAAuD;AACvD,IAAI,SAAS,GAAoC,IAAI,CAAC;AAEtD,SAAS,MAAM;IACb,IAAI,SAAS;QAAE,OAAO,SAAS,CAAC;IAChC,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;IACvD,UAAU,CAAC,GAAG,CAAC,CAAC;IAChB,iDAAiD;IACjD,MAAM,GAAG,GAAG,SAAS,EAAE,CAAC;IACxB,MAAM,EAAE,GAAG,OAAO,CAAC,SAAS,CAA6B,CAAC;IAC1D,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC;QACtF,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;QAClE,GAAG,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;IACpC,CAAC;IACD,SAAS,GAAG,GAAG,CAAC;IAChB,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,aAAa,CAAC,IAAa;IACzC,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;IAC/B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACnC,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACzC,MAAM,MAAM,GAAG,SAAS,CAAkB,IAAI,CAAC,CAAC;IAEhD,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC;IACrB,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;IAC1D,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,OAAO,GAAG,CAAC,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC;aAC/B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,YAAY,IAAI,GAAG,KAAK,CAAC,CAAC,OAAO,IAAI,SAAS,EAAE,CAAC;aACrE,IAAI,CAAC,IAAI,CAAC,CAAC;QACd,MAAM,IAAI,KAAK,CACb,WAAW,IAAI,MAAM,OAAO,mFAAmF,CAChH,CAAC;IACJ,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paths.test.d.ts","sourceRoot":"","sources":["../../../src/shared/tests/paths.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tests for paths.ts — primarily the walk-up `repoRoot()` behaviour
|
|
3
|
+
* introduced for monorepo / sub-directory usage.
|
|
4
|
+
*/
|
|
5
|
+
import { mkdirSync, rmSync, realpathSync } from "node:fs";
|
|
6
|
+
import { join } from "node:path";
|
|
7
|
+
import { tmpdir } from "node:os";
|
|
8
|
+
import { repoRoot, findDkkRoot, serviceFile, federationFile, importedServiceDir } from "../paths.js";
|
|
9
|
+
let passed = 0;
|
|
10
|
+
let failed = 0;
|
|
11
|
+
function assert(label, condition, detail) {
|
|
12
|
+
if (condition) {
|
|
13
|
+
console.log(` OK: ${label}`);
|
|
14
|
+
passed++;
|
|
15
|
+
}
|
|
16
|
+
else {
|
|
17
|
+
console.error(`FAIL: ${label}${detail ? ` — ${detail}` : ""}`);
|
|
18
|
+
failed++;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
// Save and restore cwd / env around each scenario.
|
|
22
|
+
const originalCwd = process.cwd();
|
|
23
|
+
const originalDisableWalkup = process.env.DKK_DISABLE_WALKUP;
|
|
24
|
+
function withCwd(dir, fn) {
|
|
25
|
+
process.chdir(dir);
|
|
26
|
+
try {
|
|
27
|
+
return fn();
|
|
28
|
+
}
|
|
29
|
+
finally {
|
|
30
|
+
process.chdir(originalCwd);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
// ── Setup fixture: nested service repo under a parent ──────────────────
|
|
34
|
+
// Layout:
|
|
35
|
+
// <TMP>/repo/.dkk/ ← the real repo root
|
|
36
|
+
// <TMP>/repo/services/foo/ ← service subdir, no .dkk
|
|
37
|
+
// <TMP>/repo/services/foo/src/ ← deeper subdir
|
|
38
|
+
// <TMP>/elsewhere/ ← unrelated dir, no .dkk anywhere
|
|
39
|
+
const RAW_TMP = join(tmpdir(), `dkk-paths-${Date.now()}`);
|
|
40
|
+
mkdirSync(RAW_TMP, { recursive: true });
|
|
41
|
+
// macOS resolves /tmp -> /private/tmp at chdir; mirror that so string
|
|
42
|
+
// comparisons line up with process.cwd().
|
|
43
|
+
const TMP = realpathSync(RAW_TMP);
|
|
44
|
+
const REPO = join(TMP, "repo");
|
|
45
|
+
const SERVICE = join(REPO, "services", "foo");
|
|
46
|
+
const DEEP = join(SERVICE, "src");
|
|
47
|
+
const ELSEWHERE = join(TMP, "elsewhere");
|
|
48
|
+
mkdirSync(join(REPO, ".dkk"), { recursive: true });
|
|
49
|
+
mkdirSync(DEEP, { recursive: true });
|
|
50
|
+
mkdirSync(ELSEWHERE, { recursive: true });
|
|
51
|
+
try {
|
|
52
|
+
// ── repoRoot — at the repo with .dkk ──────────────────────────────────
|
|
53
|
+
console.log("\n=== repoRoot() at repo with .dkk ===");
|
|
54
|
+
withCwd(REPO, () => {
|
|
55
|
+
delete process.env.DKK_DISABLE_WALKUP;
|
|
56
|
+
assert("cwd at root with .dkk returns cwd", repoRoot() === REPO);
|
|
57
|
+
});
|
|
58
|
+
// ── repoRoot — walk-up from a sub-directory ───────────────────────────
|
|
59
|
+
console.log("\n=== repoRoot() walks up from sub-dir ===");
|
|
60
|
+
withCwd(SERVICE, () => {
|
|
61
|
+
delete process.env.DKK_DISABLE_WALKUP;
|
|
62
|
+
assert("from services/foo finds repo .dkk", repoRoot() === REPO);
|
|
63
|
+
});
|
|
64
|
+
withCwd(DEEP, () => {
|
|
65
|
+
delete process.env.DKK_DISABLE_WALKUP;
|
|
66
|
+
assert("from services/foo/src finds repo .dkk", repoRoot() === REPO);
|
|
67
|
+
});
|
|
68
|
+
// ── Explicit --root override skips walk-up ────────────────────────────
|
|
69
|
+
console.log("\n=== explicit --root override ===");
|
|
70
|
+
withCwd(DEEP, () => {
|
|
71
|
+
delete process.env.DKK_DISABLE_WALKUP;
|
|
72
|
+
assert("explicit override is used verbatim, no walk-up", repoRoot(ELSEWHERE) === ELSEWHERE);
|
|
73
|
+
});
|
|
74
|
+
// ── DKK_DISABLE_WALKUP=1 disables walk-up ─────────────────────────────
|
|
75
|
+
console.log("\n=== DKK_DISABLE_WALKUP=1 ===");
|
|
76
|
+
withCwd(DEEP, () => {
|
|
77
|
+
process.env.DKK_DISABLE_WALKUP = "1";
|
|
78
|
+
assert("walk-up disabled returns cwd as-is", repoRoot() === DEEP);
|
|
79
|
+
delete process.env.DKK_DISABLE_WALKUP;
|
|
80
|
+
});
|
|
81
|
+
// ── No .dkk anywhere — fall back to cwd ───────────────────────────────
|
|
82
|
+
console.log("\n=== no .dkk anywhere, fallback to cwd ===");
|
|
83
|
+
withCwd(ELSEWHERE, () => {
|
|
84
|
+
delete process.env.DKK_DISABLE_WALKUP;
|
|
85
|
+
assert("fallback to cwd when no .dkk on walk-up path", repoRoot() === ELSEWHERE);
|
|
86
|
+
});
|
|
87
|
+
// ── Federation path helpers compose correctly ─────────────────────────
|
|
88
|
+
console.log("\n=== federation path helpers ===");
|
|
89
|
+
assert("serviceFile", serviceFile(REPO) === join(REPO, ".dkk", "service.yml"));
|
|
90
|
+
assert("federationFile", federationFile(REPO) === join(REPO, ".dkk", "federation.yml"));
|
|
91
|
+
assert("importedServiceDir", importedServiceDir("payments", REPO) === join(REPO, ".dkk", "imports", "payments"));
|
|
92
|
+
// ── findDkkRoot — direct walk-up search ───────────────────────────────
|
|
93
|
+
console.log("\n=== findDkkRoot ===");
|
|
94
|
+
assert("findDkkRoot at repo returns repo", findDkkRoot(REPO) === REPO);
|
|
95
|
+
assert("findDkkRoot from sub-dir returns repo", findDkkRoot(SERVICE) === REPO);
|
|
96
|
+
assert("findDkkRoot from deep sub-dir returns repo", findDkkRoot(DEEP) === REPO);
|
|
97
|
+
assert("findDkkRoot from dir with no .dkk returns null", findDkkRoot(ELSEWHERE) === null);
|
|
98
|
+
}
|
|
99
|
+
finally {
|
|
100
|
+
rmSync(TMP, { recursive: true, force: true });
|
|
101
|
+
if (originalDisableWalkup === undefined) {
|
|
102
|
+
delete process.env.DKK_DISABLE_WALKUP;
|
|
103
|
+
}
|
|
104
|
+
else {
|
|
105
|
+
process.env.DKK_DISABLE_WALKUP = originalDisableWalkup;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
console.log(`\n${passed} passed, ${failed} failed`);
|
|
109
|
+
if (failed > 0)
|
|
110
|
+
process.exit(1);
|
|
111
|
+
//# sourceMappingURL=paths.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paths.test.js","sourceRoot":"","sources":["../../../src/shared/tests/paths.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"refs.test.d.ts","sourceRoot":"","sources":["../../../src/shared/tests/refs.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tests for the ref-parsing utility.
|
|
3
|
+
*
|
|
4
|
+
* Covers all five id shapes (item, adr, actor, flow, context), the
|
|
5
|
+
* optional service prefix on each, and a range of invalid inputs.
|
|
6
|
+
*/
|
|
7
|
+
import { parseRef, formatRef } from "../refs.js";
|
|
8
|
+
let passed = 0;
|
|
9
|
+
let failed = 0;
|
|
10
|
+
function assert(label, condition, detail) {
|
|
11
|
+
if (condition) {
|
|
12
|
+
console.log(` OK: ${label}`);
|
|
13
|
+
passed++;
|
|
14
|
+
}
|
|
15
|
+
else {
|
|
16
|
+
console.error(`FAIL: ${label}${detail ? ` — ${detail}` : ""}`);
|
|
17
|
+
failed++;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
function assertEqual(label, actual, expected) {
|
|
21
|
+
const ok = JSON.stringify(actual) === JSON.stringify(expected);
|
|
22
|
+
assert(label, ok, ok ? undefined : `expected ${JSON.stringify(expected)}, got ${JSON.stringify(actual)}`);
|
|
23
|
+
}
|
|
24
|
+
// ── Bare refs (no service prefix) ──────────────────────────────────────
|
|
25
|
+
console.log("\n=== bare refs ===");
|
|
26
|
+
assertEqual("item", parseRef("ordering.OrderPlaced"), {
|
|
27
|
+
kind: "item",
|
|
28
|
+
context: "ordering",
|
|
29
|
+
name: "OrderPlaced",
|
|
30
|
+
});
|
|
31
|
+
assertEqual("item with multi-word context", parseRef("order-management.PlaceOrder"), {
|
|
32
|
+
kind: "item",
|
|
33
|
+
context: "order-management",
|
|
34
|
+
name: "PlaceOrder",
|
|
35
|
+
});
|
|
36
|
+
assertEqual("adr", parseRef("adr-0001"), { kind: "adr", id: "adr-0001" });
|
|
37
|
+
assertEqual("actor", parseRef("actor.Customer"), { kind: "actor", name: "Customer" });
|
|
38
|
+
assertEqual("flow", parseRef("flow.OrderFulfillment"), { kind: "flow", name: "OrderFulfillment" });
|
|
39
|
+
assertEqual("context", parseRef("context.ordering"), { kind: "context", name: "ordering" });
|
|
40
|
+
// ── Service-prefixed refs ──────────────────────────────────────────────
|
|
41
|
+
console.log("\n=== service-prefixed refs ===");
|
|
42
|
+
assertEqual("service-prefixed item", parseRef("payments:billing.PaymentCaptured"), {
|
|
43
|
+
kind: "item",
|
|
44
|
+
service: "payments",
|
|
45
|
+
context: "billing",
|
|
46
|
+
name: "PaymentCaptured",
|
|
47
|
+
});
|
|
48
|
+
assertEqual("service-prefixed adr", parseRef("ordering:adr-0007"), {
|
|
49
|
+
kind: "adr",
|
|
50
|
+
service: "ordering",
|
|
51
|
+
id: "adr-0007",
|
|
52
|
+
});
|
|
53
|
+
assertEqual("service-prefixed actor", parseRef("payments:actor.PaymentGateway"), {
|
|
54
|
+
kind: "actor",
|
|
55
|
+
service: "payments",
|
|
56
|
+
name: "PaymentGateway",
|
|
57
|
+
});
|
|
58
|
+
assertEqual("service-prefixed flow", parseRef("ordering:flow.OrderFulfillment"), {
|
|
59
|
+
kind: "flow",
|
|
60
|
+
service: "ordering",
|
|
61
|
+
name: "OrderFulfillment",
|
|
62
|
+
});
|
|
63
|
+
assertEqual("service-prefixed context", parseRef("ordering:context.ordering"), {
|
|
64
|
+
kind: "context",
|
|
65
|
+
service: "ordering",
|
|
66
|
+
name: "ordering",
|
|
67
|
+
});
|
|
68
|
+
// ── Invalid inputs ─────────────────────────────────────────────────────
|
|
69
|
+
console.log("\n=== invalid inputs ===");
|
|
70
|
+
assert("empty string", parseRef("") === null);
|
|
71
|
+
assert("just a colon", parseRef(":") === null);
|
|
72
|
+
assert("trailing colon", parseRef("payments:") === null);
|
|
73
|
+
assert("PascalCase service prefix", parseRef("Payments:billing.X") === null);
|
|
74
|
+
assert("digits-only context", parseRef("123.PlaceOrder") === null);
|
|
75
|
+
assert("lowercase item name", parseRef("ordering.placeOrder") !== null); // PascalCase pattern allows leading lowercase per existing schemas
|
|
76
|
+
assert("snake_case context", parseRef("order_mgmt.X") === null);
|
|
77
|
+
assert("bad adr format", parseRef("adr-99") === null);
|
|
78
|
+
assert("adr with extra chars", parseRef("adr-0001x") === null);
|
|
79
|
+
assert("actor with bad name", parseRef("actor.bad-name") === null);
|
|
80
|
+
assert("flow with empty name", parseRef("flow.") === null);
|
|
81
|
+
assert("context with PascalCase", parseRef("context.Ordering") === null);
|
|
82
|
+
assert("no dot in item", parseRef("ordering") === null);
|
|
83
|
+
assert("dot at start", parseRef(".Foo") === null);
|
|
84
|
+
// ── formatRef round-trip ───────────────────────────────────────────────
|
|
85
|
+
console.log("\n=== formatRef round-trip ===");
|
|
86
|
+
const samples = [
|
|
87
|
+
"ordering.OrderPlaced",
|
|
88
|
+
"payments:billing.PaymentCaptured",
|
|
89
|
+
"adr-0001",
|
|
90
|
+
"ordering:adr-0007",
|
|
91
|
+
"actor.Customer",
|
|
92
|
+
"payments:actor.PaymentGateway",
|
|
93
|
+
"flow.OrderFulfillment",
|
|
94
|
+
"context.ordering",
|
|
95
|
+
];
|
|
96
|
+
for (const s of samples) {
|
|
97
|
+
const parsed = parseRef(s);
|
|
98
|
+
assert(`round-trip ${s}`, parsed !== null && formatRef(parsed) === s);
|
|
99
|
+
}
|
|
100
|
+
// ── Summary ────────────────────────────────────────────────────────────
|
|
101
|
+
console.log(`\n${passed} passed, ${failed} failed`);
|
|
102
|
+
if (failed > 0)
|
|
103
|
+
process.exit(1);
|
|
104
|
+
//# sourceMappingURL=refs.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"refs.test.js","sourceRoot":"","sources":["../../../src/shared/tests/refs.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -246,5 +246,19 @@ export interface DomainModel {
|
|
|
246
246
|
contexts: Map<string, DomainContext>;
|
|
247
247
|
/** All ADR records keyed by ADR id. */
|
|
248
248
|
adrs: Map<string, AdrRecord>;
|
|
249
|
+
/**
|
|
250
|
+
* Service identity for this repo (federation). Present when a
|
|
251
|
+
* `.dkk/service.yml` was found; otherwise `undefined`. Legacy
|
|
252
|
+
* unfederated repos keep working unchanged.
|
|
253
|
+
*/
|
|
254
|
+
service?: import("./federation.js").ServiceManifest;
|
|
255
|
+
/**
|
|
256
|
+
* Peer service models loaded from `.dkk/federation.yml`. Keyed by
|
|
257
|
+
* peer service name. Each value is a fully-loaded `DomainModel`
|
|
258
|
+
* (one level deep — peer's own peers are not transitively followed).
|
|
259
|
+
* Present only when federation is configured and at least one peer
|
|
260
|
+
* was reachable.
|
|
261
|
+
*/
|
|
262
|
+
peers?: Map<string, DomainModel>;
|
|
249
263
|
}
|
|
250
264
|
//# sourceMappingURL=domain.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"domain.d.ts","sourceRoot":"","sources":["../../../src/shared/types/domain.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"domain.d.ts","sourceRoot":"","sources":["../../../src/shared/types/domain.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TypeScript interfaces for the multi-repo federation layer.
|
|
3
|
+
*
|
|
4
|
+
* `service.yml` declares this repo's service identity. `federation.yml`
|
|
5
|
+
* lists peer services whose `.dkk/` directories should be loaded
|
|
6
|
+
* alongside the local model (read-only).
|
|
7
|
+
*
|
|
8
|
+
* Aligns with JSON schemas under tools/dkk/schema/service.schema.json
|
|
9
|
+
* and federation.schema.json.
|
|
10
|
+
*/
|
|
11
|
+
/** Service identity file (.dkk/service.yml). */
|
|
12
|
+
export interface ServiceManifest {
|
|
13
|
+
/** Kebab-case service identifier (e.g. "ordering"). Globally unique within an org. */
|
|
14
|
+
name: string;
|
|
15
|
+
/** Bounded-context names this service publishes for cross-repo consumption. */
|
|
16
|
+
exports: string[];
|
|
17
|
+
/** Optional human-readable description of the service. */
|
|
18
|
+
description?: string;
|
|
19
|
+
}
|
|
20
|
+
/** Filesystem-path peer source. */
|
|
21
|
+
export interface LocalPeerSource {
|
|
22
|
+
type: "local";
|
|
23
|
+
/** Absolute or repo-root-relative path to the peer's repository root. */
|
|
24
|
+
path: string;
|
|
25
|
+
}
|
|
26
|
+
/** Git-clone peer source (sparse-checkout of `.dkk/`). */
|
|
27
|
+
export interface GitPeerSource {
|
|
28
|
+
type: "git";
|
|
29
|
+
/** Git URL (https / ssh). */
|
|
30
|
+
url: string;
|
|
31
|
+
/** Branch to track. */
|
|
32
|
+
branch: string;
|
|
33
|
+
/** Optional sub-path inside the peer repo where `.dkk/` lives. Defaults to repo root. */
|
|
34
|
+
path?: string;
|
|
35
|
+
}
|
|
36
|
+
/** Discriminated union of supported peer source types. */
|
|
37
|
+
export type PeerSource = LocalPeerSource | GitPeerSource;
|
|
38
|
+
/** A single peer entry in the federation manifest. */
|
|
39
|
+
export interface PeerSpec {
|
|
40
|
+
/** Kebab-case service name (must match the peer's own `service.yml`). */
|
|
41
|
+
name: string;
|
|
42
|
+
/** Where to read the peer's `.dkk/` from. */
|
|
43
|
+
source: PeerSource;
|
|
44
|
+
}
|
|
45
|
+
/** Federation manifest file (.dkk/federation.yml). */
|
|
46
|
+
export interface FederationManifest {
|
|
47
|
+
peers: PeerSpec[];
|
|
48
|
+
}
|
|
49
|
+
/** A single entry in the federation lockfile (pins git SHAs). */
|
|
50
|
+
export interface LockEntry {
|
|
51
|
+
/** Mirrors the manifest entry's source for change detection. */
|
|
52
|
+
source: PeerSource;
|
|
53
|
+
/** Resolved commit SHA at the time of fetch (git sources only). */
|
|
54
|
+
sha?: string;
|
|
55
|
+
/** ISO-8601 timestamp of the fetch. */
|
|
56
|
+
fetchedAt?: string;
|
|
57
|
+
}
|
|
58
|
+
/** Lockfile shape (.dkk/federation.lock.json). */
|
|
59
|
+
export type FederationLock = Record<string, LockEntry>;
|
|
60
|
+
//# sourceMappingURL=federation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"federation.d.ts","sourceRoot":"","sources":["../../../src/shared/types/federation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,gDAAgD;AAChD,MAAM,WAAW,eAAe;IAC9B,sFAAsF;IACtF,IAAI,EAAE,MAAM,CAAC;IACb,+EAA+E;IAC/E,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,0DAA0D;IAC1D,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,mCAAmC;AACnC,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,OAAO,CAAC;IACd,yEAAyE;IACzE,IAAI,EAAE,MAAM,CAAC;CACd;AAED,0DAA0D;AAC1D,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,KAAK,CAAC;IACZ,6BAA6B;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,uBAAuB;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,yFAAyF;IACzF,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,0DAA0D;AAC1D,MAAM,MAAM,UAAU,GAAG,eAAe,GAAG,aAAa,CAAC;AAEzD,sDAAsD;AACtD,MAAM,WAAW,QAAQ;IACvB,yEAAyE;IACzE,IAAI,EAAE,MAAM,CAAC;IACb,6CAA6C;IAC7C,MAAM,EAAE,UAAU,CAAC;CACpB;AAED,sDAAsD;AACtD,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,QAAQ,EAAE,CAAC;CACnB;AAED,iEAAiE;AACjE,MAAM,WAAW,SAAS;IACxB,gEAAgE;IAChE,MAAM,EAAE,UAAU,CAAC;IACnB,mEAAmE;IACnE,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,uCAAuC;IACvC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,kDAAkD;AAClD,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC"}
|