domain-knowledge-kit 0.2.11 → 0.2.13
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/dist/cli.js +41 -10
- 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 +78 -21
- package/dist/features/agent/commands/init.js.map +1 -1
- package/dist/features/agent/commands/prime.d.ts.map +1 -1
- package/dist/features/agent/commands/prime.js +22 -13
- package/dist/features/agent/commands/prime.js.map +1 -1
- package/dist/features/audit/commands/stats.js +1 -1
- package/dist/features/audit/commands/stats.js.map +1 -1
- package/dist/features/pipeline/renderer.d.ts.map +1 -1
- package/dist/features/pipeline/renderer.js +4 -0
- package/dist/features/pipeline/renderer.js.map +1 -1
- package/dist/features/pipeline/validator.d.ts.map +1 -1
- package/dist/features/pipeline/validator.js +15 -14
- package/dist/features/pipeline/validator.js.map +1 -1
- package/dist/features/query/commands/graph.d.ts +10 -0
- package/dist/features/query/commands/graph.d.ts.map +1 -1
- package/dist/features/query/commands/graph.js +121 -3
- package/dist/features/query/commands/graph.js.map +1 -1
- package/dist/features/query/commands/list.d.ts.map +1 -1
- package/dist/features/query/commands/list.js +3 -1
- package/dist/features/query/commands/list.js.map +1 -1
- package/dist/features/query/commands/locate.d.ts +3 -0
- package/dist/features/query/commands/locate.d.ts.map +1 -0
- package/dist/features/query/commands/locate.js +96 -0
- package/dist/features/query/commands/locate.js.map +1 -0
- package/dist/features/query/commands/related.js +1 -1
- package/dist/features/query/commands/related.js.map +1 -1
- package/dist/features/query/commands/search.js +1 -1
- package/dist/features/query/commands/search.js.map +1 -1
- package/dist/features/query/commands/show.js +1 -1
- package/dist/features/query/commands/show.js.map +1 -1
- package/dist/features/query/commands/story.d.ts +12 -0
- package/dist/features/query/commands/story.d.ts.map +1 -0
- package/dist/features/query/commands/story.js +337 -0
- package/dist/features/query/commands/story.js.map +1 -0
- package/dist/features/query/commands/summary.js +1 -1
- package/dist/features/query/commands/summary.js.map +1 -1
- package/dist/features/refactor/commands/move.d.ts.map +1 -1
- package/dist/features/refactor/commands/move.js +1 -1
- package/dist/features/refactor/commands/move.js.map +1 -1
- package/dist/features/refactor/commands/rename.d.ts.map +1 -1
- package/dist/features/refactor/commands/rename.js +1 -1
- package/dist/features/refactor/commands/rename.js.map +1 -1
- package/dist/features/refactor/commands/rm.d.ts.map +1 -1
- package/dist/features/refactor/commands/rm.js +1 -1
- package/dist/features/refactor/commands/rm.js.map +1 -1
- package/dist/features/scaffold/commands/add-item.d.ts +2 -13
- package/dist/features/scaffold/commands/add-item.d.ts.map +1 -1
- package/dist/features/scaffold/commands/add-item.js +34 -110
- package/dist/features/scaffold/commands/add-item.js.map +1 -1
- package/dist/features/scaffold/commands/new-adr.d.ts.map +1 -1
- package/dist/features/scaffold/commands/new-adr.js +1 -20
- package/dist/features/scaffold/commands/new-adr.js.map +1 -1
- package/dist/shared/paths.d.ts +7 -0
- package/dist/shared/paths.d.ts.map +1 -1
- package/dist/shared/paths.js +9 -0
- package/dist/shared/paths.js.map +1 -1
- package/dist/shared/similarity.d.ts +3 -0
- package/dist/shared/similarity.d.ts.map +1 -0
- package/dist/shared/similarity.js +52 -0
- package/dist/shared/similarity.js.map +1 -0
- package/package.json +1 -1
- package/tools/dkk/templates/index.md.hbs +4 -0
- package/dist/features/adr/commands/adr-related.d.ts +0 -14
- package/dist/features/adr/commands/adr-related.d.ts.map +0 -1
- package/dist/features/adr/commands/adr-related.js +0 -147
- package/dist/features/adr/commands/adr-related.js.map +0 -1
- package/dist/features/adr/commands/adr-show.d.ts +0 -10
- package/dist/features/adr/commands/adr-show.d.ts.map +0 -1
- package/dist/features/adr/commands/adr-show.js +0 -31
- package/dist/features/adr/commands/adr-show.js.map +0 -1
- package/dist/features/scaffold/wiring.d.ts +0 -29
- package/dist/features/scaffold/wiring.d.ts.map +0 -1
- package/dist/features/scaffold/wiring.js +0 -180
- package/dist/features/scaffold/wiring.js.map +0 -1
|
@@ -1,147 +0,0 @@
|
|
|
1
|
-
import { loadDomainModel } from "../../../shared/loader.js";
|
|
2
|
-
import { forEachItem, itemAdrRefs } from "../../../shared/item-visitor.js";
|
|
3
|
-
/** Collect domain item IDs that reference a specific ADR. */
|
|
4
|
-
function domainItemsReferencingAdr(model, adrId) {
|
|
5
|
-
const refs = [];
|
|
6
|
-
// Actors
|
|
7
|
-
for (const actor of model.actors) {
|
|
8
|
-
if (actor.adr_refs?.includes(adrId)) {
|
|
9
|
-
refs.push(`actor.${actor.name}`);
|
|
10
|
-
}
|
|
11
|
-
}
|
|
12
|
-
// Context items — use shared item visitor
|
|
13
|
-
for (const [ctxName, ctx] of model.contexts) {
|
|
14
|
-
forEachItem(ctx, (_type, name, item) => {
|
|
15
|
-
if (itemAdrRefs(item)?.includes(adrId)) {
|
|
16
|
-
refs.push(`${ctxName}.${name}`);
|
|
17
|
-
}
|
|
18
|
-
});
|
|
19
|
-
}
|
|
20
|
-
return refs.sort();
|
|
21
|
-
}
|
|
22
|
-
/** Collect ADR IDs that reference a specific domain item via domain_refs. */
|
|
23
|
-
function adrsReferencingItem(model, itemId) {
|
|
24
|
-
const refs = [];
|
|
25
|
-
for (const [adrId, adr] of model.adrs) {
|
|
26
|
-
if (adr.domain_refs?.includes(itemId)) {
|
|
27
|
-
refs.push(adrId);
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
return refs.sort();
|
|
31
|
-
}
|
|
32
|
-
/** Collect ADR IDs listed in a domain item's own adr_refs field. */
|
|
33
|
-
function ownAdrRefs(model, itemId) {
|
|
34
|
-
// Actor
|
|
35
|
-
if (itemId.startsWith("actor.")) {
|
|
36
|
-
const name = itemId.slice("actor.".length);
|
|
37
|
-
const actor = model.actors.find((a) => a.name === name);
|
|
38
|
-
return (actor?.adr_refs ?? []);
|
|
39
|
-
}
|
|
40
|
-
// Context-scoped item — use shared item visitor
|
|
41
|
-
const dotIdx = itemId.indexOf(".");
|
|
42
|
-
if (dotIdx > 0) {
|
|
43
|
-
const ctxName = itemId.slice(0, dotIdx);
|
|
44
|
-
const itemNameStr = itemId.slice(dotIdx + 1);
|
|
45
|
-
const ctx = model.contexts.get(ctxName);
|
|
46
|
-
if (!ctx)
|
|
47
|
-
return [];
|
|
48
|
-
let result = [];
|
|
49
|
-
forEachItem(ctx, (_type, name, item) => {
|
|
50
|
-
if (name === itemNameStr) {
|
|
51
|
-
result = (itemAdrRefs(item) ?? []);
|
|
52
|
-
}
|
|
53
|
-
});
|
|
54
|
-
return result;
|
|
55
|
-
}
|
|
56
|
-
return [];
|
|
57
|
-
}
|
|
58
|
-
/** Register the `adr related` subcommand on an `adr` parent command. */
|
|
59
|
-
export function registerAdrRelated(adrCmd) {
|
|
60
|
-
adrCmd
|
|
61
|
-
.command("related <id>")
|
|
62
|
-
.description("Show bidirectional domain-ADR links for an ADR or domain item")
|
|
63
|
-
.option("--json", "Output as JSON")
|
|
64
|
-
.option("--minify", "Minify JSON output (useful for AI agents)")
|
|
65
|
-
.option("-r, --root <path>", "Override repository root")
|
|
66
|
-
.action((id, opts) => {
|
|
67
|
-
const model = loadDomainModel({ root: opts.root });
|
|
68
|
-
const isAdr = id.startsWith("adr-");
|
|
69
|
-
if (isAdr) {
|
|
70
|
-
// ADR → domain items
|
|
71
|
-
if (!model.adrs.has(id)) {
|
|
72
|
-
if (opts.json) {
|
|
73
|
-
console.log(JSON.stringify({ error: `ADR "${id}" not found` }, null, opts.minify ? 0 : 2));
|
|
74
|
-
}
|
|
75
|
-
else {
|
|
76
|
-
console.error(`Error: ADR "${id}" not found.`);
|
|
77
|
-
}
|
|
78
|
-
process.exit(1);
|
|
79
|
-
}
|
|
80
|
-
const adr = model.adrs.get(id);
|
|
81
|
-
const domainRefs = (adr.domain_refs ?? []);
|
|
82
|
-
const itemsReferencing = domainItemsReferencingAdr(model, id);
|
|
83
|
-
if (opts.json) {
|
|
84
|
-
console.log(JSON.stringify({
|
|
85
|
-
id,
|
|
86
|
-
title: adr.title,
|
|
87
|
-
domainRefs,
|
|
88
|
-
referencedBy: itemsReferencing,
|
|
89
|
-
}, null, opts.minify ? 0 : 2));
|
|
90
|
-
return;
|
|
91
|
-
}
|
|
92
|
-
console.log(`\n# Related items for ${id} (${adr.title})\n`);
|
|
93
|
-
if (domainRefs.length > 0) {
|
|
94
|
-
console.log(" ADR → Domain (domain_refs from ADR frontmatter):");
|
|
95
|
-
for (const ref of domainRefs) {
|
|
96
|
-
console.log(` - ${ref}`);
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
if (itemsReferencing.length > 0) {
|
|
100
|
-
console.log(" Domain → ADR (items with adr_refs pointing here):");
|
|
101
|
-
for (const ref of itemsReferencing) {
|
|
102
|
-
console.log(` - ${ref}`);
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
if (domainRefs.length === 0 && itemsReferencing.length === 0) {
|
|
106
|
-
console.log(" No related items found.");
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
else {
|
|
110
|
-
// Domain item → ADRs
|
|
111
|
-
const own = ownAdrRefs(model, id);
|
|
112
|
-
const referencing = adrsReferencingItem(model, id);
|
|
113
|
-
const allAdrs = [...new Set([...own, ...referencing])].sort();
|
|
114
|
-
if (opts.json) {
|
|
115
|
-
console.log(JSON.stringify({
|
|
116
|
-
id,
|
|
117
|
-
ownAdrRefs: own,
|
|
118
|
-
referencedByAdrs: referencing,
|
|
119
|
-
allAdrs,
|
|
120
|
-
}, null, opts.minify ? 0 : 2));
|
|
121
|
-
return;
|
|
122
|
-
}
|
|
123
|
-
console.log(`\n# Related ADRs for ${id}\n`);
|
|
124
|
-
if (own.length > 0) {
|
|
125
|
-
console.log(" Item → ADR (adr_refs declared on this item):");
|
|
126
|
-
for (const ref of own) {
|
|
127
|
-
const adr = model.adrs.get(ref);
|
|
128
|
-
const title = adr ? ` — ${adr.title}` : "";
|
|
129
|
-
console.log(` - ${ref}${title}`);
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
if (referencing.length > 0) {
|
|
133
|
-
console.log(" ADR → Item (ADRs with domain_refs pointing here):");
|
|
134
|
-
for (const ref of referencing) {
|
|
135
|
-
const adr = model.adrs.get(ref);
|
|
136
|
-
const title = adr ? ` — ${adr.title}` : "";
|
|
137
|
-
console.log(` - ${ref}${title}`);
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
if (allAdrs.length === 0) {
|
|
141
|
-
console.log(" No related ADRs found.");
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
console.log();
|
|
145
|
-
});
|
|
146
|
-
}
|
|
147
|
-
//# sourceMappingURL=adr-related.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"adr-related.js","sourceRoot":"","sources":["../../../../src/features/adr/commands/adr-related.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* `domain adr show <id>` command — print an ADR's frontmatter.
|
|
3
|
-
*
|
|
4
|
-
* Looks up an ADR by its id (e.g. "adr-0001") and prints
|
|
5
|
-
* its frontmatter metadata as YAML, plus location on disk.
|
|
6
|
-
*/
|
|
7
|
-
import type { Command as Cmd } from "commander";
|
|
8
|
-
/** Register the `adr show` subcommand on an `adr` parent command. */
|
|
9
|
-
export declare function registerAdrShow(adrCmd: Cmd): void;
|
|
10
|
-
//# sourceMappingURL=adr-show.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"adr-show.d.ts","sourceRoot":"","sources":["../../../../src/features/adr/commands/adr-show.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,OAAO,IAAI,GAAG,EAAE,MAAM,WAAW,CAAC;AAIhD,qEAAqE;AACrE,wBAAgB,eAAe,CAAC,MAAM,EAAE,GAAG,GAAG,IAAI,CA4BjD"}
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
import { loadDomainModel } from "../../../shared/loader.js";
|
|
2
|
-
import { stringifyYaml } from "../../../shared/yaml.js";
|
|
3
|
-
/** Register the `adr show` subcommand on an `adr` parent command. */
|
|
4
|
-
export function registerAdrShow(adrCmd) {
|
|
5
|
-
adrCmd
|
|
6
|
-
.command("show <id>")
|
|
7
|
-
.description("Show ADR frontmatter by ID (e.g. adr-0001)")
|
|
8
|
-
.option("--json", "Output as JSON")
|
|
9
|
-
.option("--minify", "Minify JSON output (useful for AI agents)")
|
|
10
|
-
.option("-r, --root <path>", "Override repository root")
|
|
11
|
-
.action((id, opts) => {
|
|
12
|
-
const model = loadDomainModel({ root: opts.root });
|
|
13
|
-
const adr = model.adrs.get(id);
|
|
14
|
-
if (!adr) {
|
|
15
|
-
if (opts.json) {
|
|
16
|
-
console.log(JSON.stringify({ error: `ADR "${id}" not found` }, null, opts.minify ? 0 : 2));
|
|
17
|
-
}
|
|
18
|
-
else {
|
|
19
|
-
console.error(`Error: ADR "${id}" not found.`);
|
|
20
|
-
}
|
|
21
|
-
process.exit(1);
|
|
22
|
-
}
|
|
23
|
-
if (opts.json) {
|
|
24
|
-
console.log(JSON.stringify(adr, null, opts.minify ? 0 : 2));
|
|
25
|
-
return;
|
|
26
|
-
}
|
|
27
|
-
console.log(`\n# ${adr.title} (${adr.id})\n`);
|
|
28
|
-
console.log(stringifyYaml(adr));
|
|
29
|
-
});
|
|
30
|
-
}
|
|
31
|
-
//# sourceMappingURL=adr-show.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"adr-show.js","sourceRoot":"","sources":["../../../../src/features/adr/commands/adr-show.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAExD,qEAAqE;AACrE,MAAM,UAAU,eAAe,CAAC,MAAW;IACzC,MAAM;SACH,OAAO,CAAC,WAAW,CAAC;SACpB,WAAW,CAAC,4CAA4C,CAAC;SACzD,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;SAClC,MAAM,CAAC,UAAU,EAAE,2CAA2C,CAAC;SAC/D,MAAM,CAAC,mBAAmB,EAAE,0BAA0B,CAAC;SACvD,MAAM,CAAC,CAAC,EAAU,EAAE,IAAyD,EAAE,EAAE;QAChF,MAAM,KAAK,GAAG,eAAe,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QACnD,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAE/B,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;gBACd,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC7F,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,KAAK,CAAC,eAAe,EAAE,cAAc,CAAC,CAAC;YACjD,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5D,OAAO;QACT,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,OAAO,GAAG,CAAC,KAAK,KAAK,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC;QAC9C,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
export interface WireNewItemOpts {
|
|
2
|
-
type: string;
|
|
3
|
-
name: string;
|
|
4
|
-
context: string;
|
|
5
|
-
raisedBy?: string;
|
|
6
|
-
handledBy?: string;
|
|
7
|
-
handles?: string[];
|
|
8
|
-
emits?: string[];
|
|
9
|
-
root?: string;
|
|
10
|
-
}
|
|
11
|
-
export interface WireResult {
|
|
12
|
-
wired: string[];
|
|
13
|
-
skipped: string[];
|
|
14
|
-
}
|
|
15
|
-
/**
|
|
16
|
-
* Wire bidirectional relationships after creating a new domain item.
|
|
17
|
-
*
|
|
18
|
-
* Covered relationship pairs:
|
|
19
|
-
* - event.raised_by ↔ aggregate.emits.events
|
|
20
|
-
* - command.handled_by ↔ aggregate.handles.commands
|
|
21
|
-
*/
|
|
22
|
-
export declare function wireNewItem(opts: WireNewItemOpts): WireResult;
|
|
23
|
-
/**
|
|
24
|
-
* Wire ADR refs: after creating an ADR, add the ADR id to each referenced
|
|
25
|
-
* domain item's `adr_refs` array. `domainRefs` entries must be in the
|
|
26
|
-
* "context.ItemName" format (e.g. "ordering.OrderPlaced").
|
|
27
|
-
*/
|
|
28
|
-
export declare function wireAdrRefs(adrId: string, domainRefs: string[], root?: string): WireResult;
|
|
29
|
-
//# sourceMappingURL=wiring.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"wiring.d.ts","sourceRoot":"","sources":["../../../src/features/scaffold/wiring.ts"],"names":[],"mappings":"AAyEA,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,eAAe,GAAG,UAAU,CAmE7D;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CACzB,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,MAAM,EAAE,EACpB,IAAI,CAAC,EAAE,MAAM,GACZ,UAAU,CAqCZ"}
|
|
@@ -1,180 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Bidirectional relationship wiring for domain item scaffolding.
|
|
3
|
-
*
|
|
4
|
-
* After creating a new item or ADR, these helpers mutate the referenced
|
|
5
|
-
* counterpart YAML files so that relationships stay consistent in both
|
|
6
|
-
* directions. All operations are idempotent — they will never insert a
|
|
7
|
-
* duplicate entry, and they are a no-op when the target file does not
|
|
8
|
-
* exist (a skip is recorded in the result instead).
|
|
9
|
-
*/
|
|
10
|
-
import { existsSync, readFileSync, writeFileSync } from "node:fs";
|
|
11
|
-
import { join } from "node:path";
|
|
12
|
-
import { parseYaml, stringifyYaml } from "../../shared/yaml.js";
|
|
13
|
-
import { contextsDir } from "../../shared/paths.js";
|
|
14
|
-
// ── Internals ─────────────────────────────────────────────────────────
|
|
15
|
-
const TYPE_DIR_MAP = {
|
|
16
|
-
event: "events",
|
|
17
|
-
command: "commands",
|
|
18
|
-
aggregate: "aggregates",
|
|
19
|
-
policy: "policies",
|
|
20
|
-
"read-model": "read-models",
|
|
21
|
-
};
|
|
22
|
-
function readYamlObj(filePath) {
|
|
23
|
-
if (!existsSync(filePath))
|
|
24
|
-
return null;
|
|
25
|
-
return parseYaml(readFileSync(filePath, "utf-8"));
|
|
26
|
-
}
|
|
27
|
-
function writeYamlObj(filePath, obj) {
|
|
28
|
-
writeFileSync(filePath, stringifyYaml(obj), "utf-8");
|
|
29
|
-
}
|
|
30
|
-
/** Add `value` to `obj[outerKey][innerKey]` (string array), idempotently. Returns true if modified. */
|
|
31
|
-
function addToNestedArray(obj, outerKey, innerKey, value) {
|
|
32
|
-
if (!obj[outerKey] || typeof obj[outerKey] !== "object" || Array.isArray(obj[outerKey])) {
|
|
33
|
-
obj[outerKey] = {};
|
|
34
|
-
}
|
|
35
|
-
const outer = obj[outerKey];
|
|
36
|
-
if (!Array.isArray(outer[innerKey])) {
|
|
37
|
-
outer[innerKey] = [];
|
|
38
|
-
}
|
|
39
|
-
const arr = outer[innerKey];
|
|
40
|
-
if (arr.includes(value))
|
|
41
|
-
return false;
|
|
42
|
-
arr.push(value);
|
|
43
|
-
return true;
|
|
44
|
-
}
|
|
45
|
-
/** Add `value` to `obj[key]` (string array), idempotently. Returns true if modified. */
|
|
46
|
-
function addToArray(obj, key, value) {
|
|
47
|
-
if (!Array.isArray(obj[key])) {
|
|
48
|
-
obj[key] = [];
|
|
49
|
-
}
|
|
50
|
-
const arr = obj[key];
|
|
51
|
-
if (arr.includes(value))
|
|
52
|
-
return false;
|
|
53
|
-
arr.push(value);
|
|
54
|
-
return true;
|
|
55
|
-
}
|
|
56
|
-
/** Set `obj[key] = value` only if the key is not already present. Returns true if modified. */
|
|
57
|
-
function setIfAbsent(obj, key, value) {
|
|
58
|
-
if (obj[key] !== undefined)
|
|
59
|
-
return false;
|
|
60
|
-
obj[key] = value;
|
|
61
|
-
return true;
|
|
62
|
-
}
|
|
63
|
-
/**
|
|
64
|
-
* Wire bidirectional relationships after creating a new domain item.
|
|
65
|
-
*
|
|
66
|
-
* Covered relationship pairs:
|
|
67
|
-
* - event.raised_by ↔ aggregate.emits.events
|
|
68
|
-
* - command.handled_by ↔ aggregate.handles.commands
|
|
69
|
-
*/
|
|
70
|
-
export function wireNewItem(opts) {
|
|
71
|
-
const result = { wired: [], skipped: [] };
|
|
72
|
-
const ctxDir = join(contextsDir(opts.root), opts.context);
|
|
73
|
-
if (opts.type === "event" && opts.raisedBy) {
|
|
74
|
-
const aggPath = join(ctxDir, "aggregates", `${opts.raisedBy}.yml`);
|
|
75
|
-
const agg = readYamlObj(aggPath);
|
|
76
|
-
if (agg) {
|
|
77
|
-
if (addToNestedArray(agg, "emits", "events", opts.name)) {
|
|
78
|
-
writeYamlObj(aggPath, agg);
|
|
79
|
-
result.wired.push(`${opts.raisedBy}.emits.events ← ${opts.name}`);
|
|
80
|
-
}
|
|
81
|
-
else {
|
|
82
|
-
result.skipped.push(`${opts.raisedBy}.emits.events already contains ${opts.name}`);
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
else {
|
|
86
|
-
result.skipped.push(`aggregate ${opts.raisedBy} not found — skipping emits wiring`);
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
if (opts.type === "command" && opts.handledBy) {
|
|
90
|
-
const aggPath = join(ctxDir, "aggregates", `${opts.handledBy}.yml`);
|
|
91
|
-
const agg = readYamlObj(aggPath);
|
|
92
|
-
if (agg) {
|
|
93
|
-
if (addToNestedArray(agg, "handles", "commands", opts.name)) {
|
|
94
|
-
writeYamlObj(aggPath, agg);
|
|
95
|
-
result.wired.push(`${opts.handledBy}.handles.commands ← ${opts.name}`);
|
|
96
|
-
}
|
|
97
|
-
else {
|
|
98
|
-
result.skipped.push(`${opts.handledBy}.handles.commands already contains ${opts.name}`);
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
else {
|
|
102
|
-
result.skipped.push(`aggregate ${opts.handledBy} not found — skipping handles wiring`);
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
if (opts.type === "aggregate") {
|
|
106
|
-
for (const eventName of opts.emits ?? []) {
|
|
107
|
-
const evtPath = join(ctxDir, "events", `${eventName}.yml`);
|
|
108
|
-
const evt = readYamlObj(evtPath);
|
|
109
|
-
if (evt) {
|
|
110
|
-
if (setIfAbsent(evt, "raised_by", opts.name)) {
|
|
111
|
-
writeYamlObj(evtPath, evt);
|
|
112
|
-
result.wired.push(`${eventName}.raised_by ← ${opts.name}`);
|
|
113
|
-
}
|
|
114
|
-
else {
|
|
115
|
-
result.skipped.push(`${eventName}.raised_by already set to "${evt.raised_by}"`);
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
else {
|
|
119
|
-
result.skipped.push(`event ${eventName} not found — skipping raised_by wiring`);
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
for (const cmdName of opts.handles ?? []) {
|
|
123
|
-
const cmdPath = join(ctxDir, "commands", `${cmdName}.yml`);
|
|
124
|
-
const cmd = readYamlObj(cmdPath);
|
|
125
|
-
if (cmd) {
|
|
126
|
-
if (setIfAbsent(cmd, "handled_by", opts.name)) {
|
|
127
|
-
writeYamlObj(cmdPath, cmd);
|
|
128
|
-
result.wired.push(`${cmdName}.handled_by ← ${opts.name}`);
|
|
129
|
-
}
|
|
130
|
-
else {
|
|
131
|
-
result.skipped.push(`${cmdName}.handled_by already set to "${cmd.handled_by}"`);
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
else {
|
|
135
|
-
result.skipped.push(`command ${cmdName} not found — skipping handled_by wiring`);
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
return result;
|
|
140
|
-
}
|
|
141
|
-
/**
|
|
142
|
-
* Wire ADR refs: after creating an ADR, add the ADR id to each referenced
|
|
143
|
-
* domain item's `adr_refs` array. `domainRefs` entries must be in the
|
|
144
|
-
* "context.ItemName" format (e.g. "ordering.OrderPlaced").
|
|
145
|
-
*/
|
|
146
|
-
export function wireAdrRefs(adrId, domainRefs, root) {
|
|
147
|
-
const result = { wired: [], skipped: [] };
|
|
148
|
-
const ctxBase = contextsDir(root);
|
|
149
|
-
for (const ref of domainRefs) {
|
|
150
|
-
const dotIdx = ref.indexOf(".");
|
|
151
|
-
if (dotIdx < 0) {
|
|
152
|
-
result.skipped.push(`invalid domain ref "${ref}" — expected context.Name format`);
|
|
153
|
-
continue;
|
|
154
|
-
}
|
|
155
|
-
const ctx = ref.slice(0, dotIdx);
|
|
156
|
-
const itemName = ref.slice(dotIdx + 1);
|
|
157
|
-
const ctxDir = join(ctxBase, ctx);
|
|
158
|
-
let found = false;
|
|
159
|
-
for (const dir of Object.values(TYPE_DIR_MAP)) {
|
|
160
|
-
const itemPath = join(ctxDir, dir, `${itemName}.yml`);
|
|
161
|
-
const item = readYamlObj(itemPath);
|
|
162
|
-
if (item) {
|
|
163
|
-
if (addToArray(item, "adr_refs", adrId)) {
|
|
164
|
-
writeYamlObj(itemPath, item);
|
|
165
|
-
result.wired.push(`${ref}.adr_refs ← ${adrId}`);
|
|
166
|
-
}
|
|
167
|
-
else {
|
|
168
|
-
result.skipped.push(`${ref}.adr_refs already contains ${adrId}`);
|
|
169
|
-
}
|
|
170
|
-
found = true;
|
|
171
|
-
break;
|
|
172
|
-
}
|
|
173
|
-
}
|
|
174
|
-
if (!found) {
|
|
175
|
-
result.skipped.push(`domain item "${ref}" not found — skipping adr_refs wiring`);
|
|
176
|
-
}
|
|
177
|
-
}
|
|
178
|
-
return result;
|
|
179
|
-
}
|
|
180
|
-
//# sourceMappingURL=wiring.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"wiring.js","sourceRoot":"","sources":["../../../src/features/scaffold/wiring.ts"],"names":[],"mappings":"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"}
|