@genvidtech/c3-domain-manager 0.0.1 → 0.6.2
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/LICENSE +18 -0
- package/README.md +195 -29
- package/dist/adapters/locations.d.ts +22 -0
- package/dist/adapters/locations.d.ts.map +1 -0
- package/dist/adapters/locations.js +42 -0
- package/dist/adapters/locations.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +99 -0
- package/dist/cli.js.map +1 -0
- package/dist/domain/classification.d.ts +8 -0
- package/dist/domain/classification.d.ts.map +1 -0
- package/dist/domain/classification.js +66 -0
- package/dist/domain/classification.js.map +1 -0
- package/dist/domain/contextMap.d.ts +8 -0
- package/dist/domain/contextMap.d.ts.map +1 -0
- package/dist/domain/contextMap.js +168 -0
- package/dist/domain/contextMap.js.map +1 -0
- package/dist/domain/domainAnalysis.d.ts +25 -0
- package/dist/domain/domainAnalysis.d.ts.map +1 -0
- package/dist/domain/domainAnalysis.js +136 -0
- package/dist/domain/domainAnalysis.js.map +1 -0
- package/dist/domain/domainGenerator.d.ts +33 -0
- package/dist/domain/domainGenerator.d.ts.map +1 -0
- package/dist/domain/domainGenerator.js +312 -0
- package/dist/domain/domainGenerator.js.map +1 -0
- package/dist/domain/editorValidation.d.ts +19 -0
- package/dist/domain/editorValidation.d.ts.map +1 -0
- package/dist/domain/editorValidation.js +40 -0
- package/dist/domain/editorValidation.js.map +1 -0
- package/dist/domain/formatting.d.ts +16 -0
- package/dist/domain/formatting.d.ts.map +1 -0
- package/dist/domain/formatting.js +414 -0
- package/dist/domain/formatting.js.map +1 -0
- package/dist/domain/glossary.d.ts +20 -0
- package/dist/domain/glossary.d.ts.map +1 -0
- package/dist/domain/glossary.js +62 -0
- package/dist/domain/glossary.js.map +1 -0
- package/dist/domain/health.d.ts +14 -0
- package/dist/domain/health.d.ts.map +1 -0
- package/dist/domain/health.js +21 -0
- package/dist/domain/health.js.map +1 -0
- package/dist/domain/relationships.d.ts +13 -0
- package/dist/domain/relationships.d.ts.map +1 -0
- package/dist/domain/relationships.js +74 -0
- package/dist/domain/relationships.js.map +1 -0
- package/dist/domain/types.d.ts +290 -0
- package/dist/domain/types.d.ts.map +1 -0
- package/dist/domain/types.js +29 -0
- package/dist/domain/types.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +12 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp/server.d.ts +3 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +519 -0
- package/dist/mcp/server.js.map +1 -0
- package/docs/TOC.md +27 -0
- package/docs/decisions/0001-adopt-c3source-extractors.md +67 -0
- package/docs/decisions/0002-configurable-locations-adapters-seam.md +72 -0
- package/docs/decisions/0003-adopt-loadprojectconfig-schema-first.md +73 -0
- package/docs/decisions/0004-adopt-mcp-utils-0.4.0-helpers.md +74 -0
- package/docs/decisions/0005-validateforeditor-read-side-diagnostic.md +65 -0
- package/docs/decisions/0006-event-variable-reference-coupling.md +77 -0
- package/docs/decisions/0007-project-dir-resolverootfolder.md +72 -0
- package/docs/decisions/0008-adopt-openproject-option-a.md +77 -0
- package/docs/domain-architecture.md +242 -0
- package/docs/releasing.md +122 -0
- package/package.json +79 -8
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
// Special characters that require quoting in mermaid node IDs
|
|
2
|
+
function needsQuoting(name) {
|
|
3
|
+
return /[\s&()/\\,.'"]/.test(name);
|
|
4
|
+
}
|
|
5
|
+
function mermaidId(name) {
|
|
6
|
+
return needsQuoting(name) ? `"${name}"` : name;
|
|
7
|
+
}
|
|
8
|
+
function toMermaidArrow(type) {
|
|
9
|
+
switch (type) {
|
|
10
|
+
case "shared-kernel":
|
|
11
|
+
return "==SK==>";
|
|
12
|
+
case "customer-supplier":
|
|
13
|
+
return "-->|C/S|";
|
|
14
|
+
case "conformist":
|
|
15
|
+
return "-->|CF|";
|
|
16
|
+
case "anti-corruption-layer":
|
|
17
|
+
return "-->|ACL|";
|
|
18
|
+
case "open-host-service":
|
|
19
|
+
return "-->|OHS|";
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
function collectIncludedDomains(domains, config, focusDomain) {
|
|
23
|
+
const domainByName = new Map(domains.map((d) => [d.name, d]));
|
|
24
|
+
if (focusDomain === undefined) {
|
|
25
|
+
return new Set(domains.map((d) => d.name));
|
|
26
|
+
}
|
|
27
|
+
const focus = domainByName.get(focusDomain);
|
|
28
|
+
if (!focus)
|
|
29
|
+
return new Set();
|
|
30
|
+
const included = new Set();
|
|
31
|
+
included.add(focusDomain);
|
|
32
|
+
// 1-hop neighbors via includesFrom (outgoing deps from domain data)
|
|
33
|
+
for (const neighbor of focus.includesFrom.keys()) {
|
|
34
|
+
included.add(neighbor);
|
|
35
|
+
}
|
|
36
|
+
// 1-hop neighbors via includedBy (incoming deps from domain data)
|
|
37
|
+
for (const neighbor of focus.includedBy.keys()) {
|
|
38
|
+
included.add(neighbor);
|
|
39
|
+
}
|
|
40
|
+
// 1-hop neighbors via referencesFrom (outgoing event-var refs)
|
|
41
|
+
for (const neighbor of focus.referencesFrom.keys()) {
|
|
42
|
+
included.add(neighbor);
|
|
43
|
+
}
|
|
44
|
+
// 1-hop neighbors via referencedBy (incoming event-var refs)
|
|
45
|
+
for (const neighbor of focus.referencedBy.keys()) {
|
|
46
|
+
included.add(neighbor);
|
|
47
|
+
}
|
|
48
|
+
// 1-hop neighbors via declared relationships
|
|
49
|
+
for (const rel of config.relationships ?? []) {
|
|
50
|
+
if (rel.from === focusDomain)
|
|
51
|
+
included.add(rel.to);
|
|
52
|
+
if (rel.to === focusDomain)
|
|
53
|
+
included.add(rel.from);
|
|
54
|
+
}
|
|
55
|
+
return included;
|
|
56
|
+
}
|
|
57
|
+
function collectEdges(domains, config, includedNames, includeObserved) {
|
|
58
|
+
const edges = [];
|
|
59
|
+
const relationships = config.relationships ?? [];
|
|
60
|
+
// Add declared relationships between included domains
|
|
61
|
+
for (const rel of relationships) {
|
|
62
|
+
if (includedNames.has(rel.from) && includedNames.has(rel.to)) {
|
|
63
|
+
edges.push({ from: rel.from, to: rel.to, type: rel.type });
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
if (!includeObserved)
|
|
67
|
+
return edges;
|
|
68
|
+
// Build a set of pairs already covered by declared relationships
|
|
69
|
+
const declaredPairs = new Set();
|
|
70
|
+
for (const rel of relationships) {
|
|
71
|
+
declaredPairs.add(`${rel.from}::${rel.to}`);
|
|
72
|
+
declaredPairs.add(`${rel.to}::${rel.from}`);
|
|
73
|
+
}
|
|
74
|
+
// Add observed edges: domain.includesFrom entries not covered by any declared relationship
|
|
75
|
+
const observedIncludePairs = new Set();
|
|
76
|
+
for (const domain of domains) {
|
|
77
|
+
if (!includedNames.has(domain.name))
|
|
78
|
+
continue;
|
|
79
|
+
for (const targetDomain of domain.includesFrom.keys()) {
|
|
80
|
+
if (!includedNames.has(targetDomain))
|
|
81
|
+
continue;
|
|
82
|
+
const pairKey = `${domain.name}::${targetDomain}`;
|
|
83
|
+
if (!declaredPairs.has(pairKey)) {
|
|
84
|
+
edges.push({ from: domain.name, to: targetDomain, type: "observed" });
|
|
85
|
+
observedIncludePairs.add(pairKey);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
// Add observed-ref edges: domain.referencesFrom entries not covered by declared or observed-include
|
|
90
|
+
for (const domain of domains) {
|
|
91
|
+
if (!includedNames.has(domain.name))
|
|
92
|
+
continue;
|
|
93
|
+
for (const targetDomain of domain.referencesFrom.keys()) {
|
|
94
|
+
if (!includedNames.has(targetDomain))
|
|
95
|
+
continue;
|
|
96
|
+
const pairKey = `${domain.name}::${targetDomain}`;
|
|
97
|
+
if (!declaredPairs.has(pairKey) && !observedIncludePairs.has(pairKey)) {
|
|
98
|
+
edges.push({ from: domain.name, to: targetDomain, type: "observed-ref" });
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
return edges;
|
|
103
|
+
}
|
|
104
|
+
function formatMermaid(includedNames, edges) {
|
|
105
|
+
if (edges.length === 0) {
|
|
106
|
+
return "graph LR";
|
|
107
|
+
}
|
|
108
|
+
const lines = ["graph LR"];
|
|
109
|
+
for (const edge of edges) {
|
|
110
|
+
const fromId = mermaidId(edge.from);
|
|
111
|
+
const toId = mermaidId(edge.to);
|
|
112
|
+
if (edge.type === "observed") {
|
|
113
|
+
lines.push(` ${fromId} -.-> ${toId}`);
|
|
114
|
+
}
|
|
115
|
+
else if (edge.type === "observed-ref") {
|
|
116
|
+
lines.push(` ${fromId} -.->|var| ${toId}`);
|
|
117
|
+
}
|
|
118
|
+
else {
|
|
119
|
+
const arrow = toMermaidArrow(edge.type);
|
|
120
|
+
lines.push(` ${fromId} ${arrow} ${toId}`);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
return lines.join("\n");
|
|
124
|
+
}
|
|
125
|
+
function formatText(domains, includedNames, edges) {
|
|
126
|
+
const includedDomains = domains.filter((d) => includedNames.has(d.name));
|
|
127
|
+
if (includedDomains.length === 0) {
|
|
128
|
+
return "Context Map:\n\nNo domains.";
|
|
129
|
+
}
|
|
130
|
+
const lines = ["Context Map:", ""];
|
|
131
|
+
const outgoing = new Map();
|
|
132
|
+
const incoming = new Map();
|
|
133
|
+
for (const name of includedNames) {
|
|
134
|
+
outgoing.set(name, []);
|
|
135
|
+
incoming.set(name, []);
|
|
136
|
+
}
|
|
137
|
+
for (const edge of edges) {
|
|
138
|
+
outgoing.get(edge.from)?.push({ neighbor: edge.to, type: edge.type });
|
|
139
|
+
incoming.get(edge.to)?.push({ neighbor: edge.from, type: edge.type });
|
|
140
|
+
}
|
|
141
|
+
for (const domain of includedDomains) {
|
|
142
|
+
lines.push(domain.name);
|
|
143
|
+
const outs = outgoing.get(domain.name) ?? [];
|
|
144
|
+
const ins = incoming.get(domain.name) ?? [];
|
|
145
|
+
for (const entry of outs) {
|
|
146
|
+
lines.push(` → ${entry.neighbor} [${entry.type}]`);
|
|
147
|
+
}
|
|
148
|
+
for (const entry of ins) {
|
|
149
|
+
lines.push(` ← ${entry.neighbor} [${entry.type}]`);
|
|
150
|
+
}
|
|
151
|
+
lines.push("");
|
|
152
|
+
}
|
|
153
|
+
// Remove trailing empty line
|
|
154
|
+
if (lines[lines.length - 1] === "") {
|
|
155
|
+
lines.pop();
|
|
156
|
+
}
|
|
157
|
+
return lines.join("\n");
|
|
158
|
+
}
|
|
159
|
+
export function generateContextMap(domains, config, opts) {
|
|
160
|
+
const includeObserved = opts.includeObserved ?? true;
|
|
161
|
+
const includedNames = collectIncludedDomains(domains, config, opts.domain);
|
|
162
|
+
const edges = collectEdges(domains, config, includedNames, includeObserved);
|
|
163
|
+
if (opts.format === "mermaid") {
|
|
164
|
+
return formatMermaid(includedNames, edges);
|
|
165
|
+
}
|
|
166
|
+
return formatText(domains, includedNames, edges);
|
|
167
|
+
}
|
|
168
|
+
//# sourceMappingURL=contextMap.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contextMap.js","sourceRoot":"","sources":["../../src/domain/contextMap.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { DomainConfig } from "./types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Scan eventSheets/, layouts/, and scripts/ directories and return files
|
|
4
|
+
* that classifyFile() returns null for (sorted).
|
|
5
|
+
*/
|
|
6
|
+
export declare function listUncategorized(rootDir: string, config: DomainConfig): string[];
|
|
7
|
+
/**
|
|
8
|
+
* Check each key in config.overrides — return keys that point to non-existent files (sorted).
|
|
9
|
+
*/
|
|
10
|
+
export declare function listStaleOverrides(rootDir: string, config: DomainConfig): string[];
|
|
11
|
+
/**
|
|
12
|
+
* Collect all valid domain and subdomain names from the config.
|
|
13
|
+
*/
|
|
14
|
+
export declare function collectValidDomainNames(config: DomainConfig): Set<string>;
|
|
15
|
+
/**
|
|
16
|
+
* Validate override keys have a recognized path prefix.
|
|
17
|
+
* Returns error strings for invalid keys. Empty array = all valid.
|
|
18
|
+
*/
|
|
19
|
+
export declare function validateOverrideKeys(keys: string[]): string[];
|
|
20
|
+
/**
|
|
21
|
+
* Validate override values are known domain/subdomain names.
|
|
22
|
+
* Returns error strings for invalid values. Empty array = all valid.
|
|
23
|
+
*/
|
|
24
|
+
export declare function validateOverrideValues(entries: Record<string, string>, validNames: Set<string>): string[];
|
|
25
|
+
//# sourceMappingURL=domainAnalysis.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"domainAnalysis.d.ts","sourceRoot":"","sources":["../../src/domain/domainAnalysis.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAiC/C;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,GAAG,MAAM,EAAE,CAwCjF;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,GAAG,MAAM,EAAE,CAYlF;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,YAAY,GAAG,GAAG,CAAC,MAAM,CAAC,CASzE;AAID;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAU7D;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC/B,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,GACtB,MAAM,EAAE,CAgBV"}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
import * as fs from "node:fs";
|
|
2
|
+
import * as path from "node:path";
|
|
3
|
+
import { openProject } from "@genvidtech/c3source";
|
|
4
|
+
import { classifyFile } from "./classification.js";
|
|
5
|
+
/**
|
|
6
|
+
* Recursively collect all files under a directory, returning paths relative to baseDir.
|
|
7
|
+
* Returns an empty array if the directory doesn't exist.
|
|
8
|
+
*/
|
|
9
|
+
function collectFiles(dir, baseDir) {
|
|
10
|
+
if (!fs.existsSync(dir))
|
|
11
|
+
return [];
|
|
12
|
+
const results = [];
|
|
13
|
+
const entries = fs.readdirSync(dir, { withFileTypes: true });
|
|
14
|
+
for (const entry of entries) {
|
|
15
|
+
const fullPath = path.join(dir, entry.name);
|
|
16
|
+
if (entry.isDirectory()) {
|
|
17
|
+
results.push(...collectFiles(fullPath, baseDir));
|
|
18
|
+
}
|
|
19
|
+
else {
|
|
20
|
+
results.push(path.relative(baseDir, fullPath).replace(/\\/g, "/"));
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
return results;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Collect root-level .ts files in a directory (non-recursive).
|
|
27
|
+
* Returns paths relative to baseDir.
|
|
28
|
+
*/
|
|
29
|
+
function collectRootTsFiles(dir, baseDir) {
|
|
30
|
+
if (!fs.existsSync(dir))
|
|
31
|
+
return [];
|
|
32
|
+
const entries = fs.readdirSync(dir, { withFileTypes: true });
|
|
33
|
+
return entries
|
|
34
|
+
.filter((e) => e.isFile() && e.name.endsWith(".ts"))
|
|
35
|
+
.map((e) => path.relative(baseDir, path.join(dir, e.name)).replace(/\\/g, "/"));
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Scan eventSheets/, layouts/, and scripts/ directories and return files
|
|
39
|
+
* that classifyFile() returns null for (sorted).
|
|
40
|
+
*/
|
|
41
|
+
export function listUncategorized(rootDir, config) {
|
|
42
|
+
const uncategorized = [];
|
|
43
|
+
const project = openProject(rootDir);
|
|
44
|
+
// EventSheets
|
|
45
|
+
const eventSheetFiles = collectFiles(project.eventSheetsDir, rootDir);
|
|
46
|
+
for (const file of eventSheetFiles) {
|
|
47
|
+
if (classifyFile(file, "eventSheet", config) === null) {
|
|
48
|
+
uncategorized.push(file);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
// Layouts
|
|
52
|
+
const layoutFiles = collectFiles(project.layoutsDir, rootDir);
|
|
53
|
+
for (const file of layoutFiles) {
|
|
54
|
+
if (classifyFile(file, "layout", config) === null) {
|
|
55
|
+
uncategorized.push(file);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
// Scripts: walk shared/, c3-runtime/, common/, ts-defs/ + root-level .ts files
|
|
59
|
+
const scriptSubdirs = ["shared", "c3-runtime", "common", "ts-defs"];
|
|
60
|
+
for (const subdir of scriptSubdirs) {
|
|
61
|
+
const files = collectFiles(path.join(project.scriptsDir, subdir), rootDir);
|
|
62
|
+
for (const file of files) {
|
|
63
|
+
if (classifyFile(file, "script", config) === null) {
|
|
64
|
+
uncategorized.push(file);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
// Root-level .ts files in scripts/
|
|
69
|
+
const rootTsFiles = collectRootTsFiles(project.scriptsDir, rootDir);
|
|
70
|
+
for (const file of rootTsFiles) {
|
|
71
|
+
if (classifyFile(file, "script", config) === null) {
|
|
72
|
+
uncategorized.push(file);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
return uncategorized.sort();
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Check each key in config.overrides — return keys that point to non-existent files (sorted).
|
|
79
|
+
*/
|
|
80
|
+
export function listStaleOverrides(rootDir, config) {
|
|
81
|
+
if (!config.overrides)
|
|
82
|
+
return [];
|
|
83
|
+
const stale = [];
|
|
84
|
+
for (const key of Object.keys(config.overrides)) {
|
|
85
|
+
const fullPath = path.join(rootDir, key);
|
|
86
|
+
if (!fs.existsSync(fullPath)) {
|
|
87
|
+
stale.push(key);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
return stale.sort();
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Collect all valid domain and subdomain names from the config.
|
|
94
|
+
*/
|
|
95
|
+
export function collectValidDomainNames(config) {
|
|
96
|
+
const names = new Set();
|
|
97
|
+
for (const key of Object.keys(config.domains)) {
|
|
98
|
+
names.add(key);
|
|
99
|
+
}
|
|
100
|
+
for (const key of Object.keys(config.sharedSubdomains ?? {})) {
|
|
101
|
+
names.add(key);
|
|
102
|
+
}
|
|
103
|
+
return names;
|
|
104
|
+
}
|
|
105
|
+
const VALID_PREFIXES = ["eventSheets/", "layouts/", "scripts/"];
|
|
106
|
+
/**
|
|
107
|
+
* Validate override keys have a recognized path prefix.
|
|
108
|
+
* Returns error strings for invalid keys. Empty array = all valid.
|
|
109
|
+
*/
|
|
110
|
+
export function validateOverrideKeys(keys) {
|
|
111
|
+
const errors = [];
|
|
112
|
+
for (const key of keys) {
|
|
113
|
+
if (!VALID_PREFIXES.some((prefix) => key.startsWith(prefix))) {
|
|
114
|
+
errors.push(`Invalid path prefix: '${key}' — must start with eventSheets/, layouts/, or scripts/`);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
return errors;
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Validate override values are known domain/subdomain names.
|
|
121
|
+
* Returns error strings for invalid values. Empty array = all valid.
|
|
122
|
+
*/
|
|
123
|
+
export function validateOverrideValues(entries, validNames) {
|
|
124
|
+
const errors = [];
|
|
125
|
+
const sortedNames = Array.from(validNames).sort();
|
|
126
|
+
const suggestion = sortedNames.length <= 5
|
|
127
|
+
? sortedNames.join(", ")
|
|
128
|
+
: sortedNames.slice(0, 5).join(", ") + ", ...";
|
|
129
|
+
for (const [filePath, domainName] of Object.entries(entries)) {
|
|
130
|
+
if (!validNames.has(domainName)) {
|
|
131
|
+
errors.push(`Unknown domain '${domainName}' for path '${filePath}' — valid names: ${suggestion}`);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
return errors;
|
|
135
|
+
}
|
|
136
|
+
//# sourceMappingURL=domainAnalysis.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"domainAnalysis.js","sourceRoot":"","sources":["../../src/domain/domainAnalysis.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { EventSheet } from "@genvidtech/c3source";
|
|
2
|
+
import type { DomainConfig, DomainData, FunctionDef } from "./types.js";
|
|
3
|
+
import type { Logger } from "@genvidtech/mcp-utils";
|
|
4
|
+
/**
|
|
5
|
+
* Map c3source's typed `ExtractedFunction` list for a sheet onto our `FunctionDef`
|
|
6
|
+
* shape: format params to a string, stamp the source sheet, and surface the
|
|
7
|
+
* custom-ACE `objectClass`/`aceName` that `formatting.ts` renders.
|
|
8
|
+
*/
|
|
9
|
+
export declare function extractFunctionDefs(sheet: EventSheet, sheetName: string): FunctionDef[];
|
|
10
|
+
/**
|
|
11
|
+
* Top-level (sheet-root ≈ global-scope) event-variable declaration names for a sheet.
|
|
12
|
+
* Only root-level `variable` events are indexed — cross-sheet references in C3 require
|
|
13
|
+
* global variables, so root-level declarations are the global-scope approximation.
|
|
14
|
+
*/
|
|
15
|
+
export declare function extractEventVarDecls(sheet: EventSheet): string[];
|
|
16
|
+
/**
|
|
17
|
+
* Deduped event-variable names referenced by System ACEs anywhere in a sheet's event tree.
|
|
18
|
+
* Walks every condition and action via `visitEvents`, applying c3source's
|
|
19
|
+
* `getEventVarReferenceName` (which gates on `objectClass === "System"`).
|
|
20
|
+
*/
|
|
21
|
+
export declare function extractEventVarRefs(sheet: EventSheet): string[];
|
|
22
|
+
export declare function loadConfig(projectRoot: string, fileName: string): Promise<DomainConfig>;
|
|
23
|
+
export declare function findScriptEntries(scriptsDir: string): Array<{
|
|
24
|
+
relativePath: string;
|
|
25
|
+
isDirectory: boolean;
|
|
26
|
+
}>;
|
|
27
|
+
export interface ComputeDomainDataResult {
|
|
28
|
+
domains: DomainData[];
|
|
29
|
+
unclassified: string[];
|
|
30
|
+
}
|
|
31
|
+
export declare function computeDomainData(rootDir: string, config: DomainConfig, log?: Logger): ComputeDomainDataResult;
|
|
32
|
+
export declare function generateDomainIndex(rootDir: string, outDir: string, projectRoot: string, fileName: string, log?: Logger): Promise<void>;
|
|
33
|
+
//# sourceMappingURL=domainGenerator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"domainGenerator.d.ts","sourceRoot":"","sources":["../../src/domain/domainGenerator.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,UAAU,EAA8C,MAAM,sBAAsB,CAAC;AAGnG,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAGxE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAOpD;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,GAAG,WAAW,EAAE,CASvF;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,EAAE,CAIhE;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,EAAE,CAiB/D;AAED,wBAAsB,UAAU,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAQ7F;AAKD,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,KAAK,CAAC;IAAE,YAAY,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,OAAO,CAAA;CAAE,CAAC,CA6B3G;AAED,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,YAAY,EACpB,GAAG,GAAE,MAAiB,GACrB,uBAAuB,CAgNzB;AAED,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,EAChB,GAAG,GAAE,MAAoB,GACxB,OAAO,CAAC,IAAI,CAAC,CA4Bf"}
|