@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.
Files changed (70) hide show
  1. package/LICENSE +18 -0
  2. package/README.md +195 -29
  3. package/dist/adapters/locations.d.ts +22 -0
  4. package/dist/adapters/locations.d.ts.map +1 -0
  5. package/dist/adapters/locations.js +42 -0
  6. package/dist/adapters/locations.js.map +1 -0
  7. package/dist/cli.d.ts +3 -0
  8. package/dist/cli.d.ts.map +1 -0
  9. package/dist/cli.js +99 -0
  10. package/dist/cli.js.map +1 -0
  11. package/dist/domain/classification.d.ts +8 -0
  12. package/dist/domain/classification.d.ts.map +1 -0
  13. package/dist/domain/classification.js +66 -0
  14. package/dist/domain/classification.js.map +1 -0
  15. package/dist/domain/contextMap.d.ts +8 -0
  16. package/dist/domain/contextMap.d.ts.map +1 -0
  17. package/dist/domain/contextMap.js +168 -0
  18. package/dist/domain/contextMap.js.map +1 -0
  19. package/dist/domain/domainAnalysis.d.ts +25 -0
  20. package/dist/domain/domainAnalysis.d.ts.map +1 -0
  21. package/dist/domain/domainAnalysis.js +136 -0
  22. package/dist/domain/domainAnalysis.js.map +1 -0
  23. package/dist/domain/domainGenerator.d.ts +33 -0
  24. package/dist/domain/domainGenerator.d.ts.map +1 -0
  25. package/dist/domain/domainGenerator.js +312 -0
  26. package/dist/domain/domainGenerator.js.map +1 -0
  27. package/dist/domain/editorValidation.d.ts +19 -0
  28. package/dist/domain/editorValidation.d.ts.map +1 -0
  29. package/dist/domain/editorValidation.js +40 -0
  30. package/dist/domain/editorValidation.js.map +1 -0
  31. package/dist/domain/formatting.d.ts +16 -0
  32. package/dist/domain/formatting.d.ts.map +1 -0
  33. package/dist/domain/formatting.js +414 -0
  34. package/dist/domain/formatting.js.map +1 -0
  35. package/dist/domain/glossary.d.ts +20 -0
  36. package/dist/domain/glossary.d.ts.map +1 -0
  37. package/dist/domain/glossary.js +62 -0
  38. package/dist/domain/glossary.js.map +1 -0
  39. package/dist/domain/health.d.ts +14 -0
  40. package/dist/domain/health.d.ts.map +1 -0
  41. package/dist/domain/health.js +21 -0
  42. package/dist/domain/health.js.map +1 -0
  43. package/dist/domain/relationships.d.ts +13 -0
  44. package/dist/domain/relationships.d.ts.map +1 -0
  45. package/dist/domain/relationships.js +74 -0
  46. package/dist/domain/relationships.js.map +1 -0
  47. package/dist/domain/types.d.ts +290 -0
  48. package/dist/domain/types.d.ts.map +1 -0
  49. package/dist/domain/types.js +29 -0
  50. package/dist/domain/types.js.map +1 -0
  51. package/dist/index.d.ts +11 -0
  52. package/dist/index.d.ts.map +1 -0
  53. package/dist/index.js +12 -0
  54. package/dist/index.js.map +1 -0
  55. package/dist/mcp/server.d.ts +3 -0
  56. package/dist/mcp/server.d.ts.map +1 -0
  57. package/dist/mcp/server.js +519 -0
  58. package/dist/mcp/server.js.map +1 -0
  59. package/docs/TOC.md +27 -0
  60. package/docs/decisions/0001-adopt-c3source-extractors.md +67 -0
  61. package/docs/decisions/0002-configurable-locations-adapters-seam.md +72 -0
  62. package/docs/decisions/0003-adopt-loadprojectconfig-schema-first.md +73 -0
  63. package/docs/decisions/0004-adopt-mcp-utils-0.4.0-helpers.md +74 -0
  64. package/docs/decisions/0005-validateforeditor-read-side-diagnostic.md +65 -0
  65. package/docs/decisions/0006-event-variable-reference-coupling.md +77 -0
  66. package/docs/decisions/0007-project-dir-resolverootfolder.md +72 -0
  67. package/docs/decisions/0008-adopt-openproject-option-a.md +77 -0
  68. package/docs/domain-architecture.md +242 -0
  69. package/docs/releasing.md +122 -0
  70. package/package.json +79 -8
@@ -0,0 +1,312 @@
1
+ import * as fs from "node:fs";
2
+ import path from "node:path";
3
+ import { openProject, extractFunctions, extractIncludes, visitEvents, hasConditions, hasActions, getEventVarReferenceName, } from "@genvidtech/c3source";
4
+ import { classifyFile } from "./classification.js";
5
+ import { formatDomainIndex as formatDomainIndexPage, formatDomainPage } from "./formatting.js";
6
+ import { DomainConfigSchema } from "./types.js";
7
+ import { loadProjectConfig, isMcpError } from "@genvidtech/mcp-utils";
8
+ /** Format function parameters as "name: type, name2: type2". */
9
+ function formatParams(params) {
10
+ return params.map((p) => `${p.name}: ${p.type}`).join(", ");
11
+ }
12
+ /**
13
+ * Map c3source's typed `ExtractedFunction` list for a sheet onto our `FunctionDef`
14
+ * shape: format params to a string, stamp the source sheet, and surface the
15
+ * custom-ACE `objectClass`/`aceName` that `formatting.ts` renders.
16
+ */
17
+ export function extractFunctionDefs(sheet, sheetName) {
18
+ return extractFunctions(sheet).map((f) => ({
19
+ name: f.name,
20
+ params: formatParams(f.params),
21
+ returnType: f.returnType,
22
+ sourceSheet: sheetName,
23
+ objectClass: f.objectClass,
24
+ aceName: f.kind === "custom-ace" ? f.name : undefined,
25
+ }));
26
+ }
27
+ /**
28
+ * Top-level (sheet-root ≈ global-scope) event-variable declaration names for a sheet.
29
+ * Only root-level `variable` events are indexed — cross-sheet references in C3 require
30
+ * global variables, so root-level declarations are the global-scope approximation.
31
+ */
32
+ export function extractEventVarDecls(sheet) {
33
+ return sheet.events
34
+ .filter((e) => e.eventType === "variable")
35
+ .map((e) => e.name);
36
+ }
37
+ /**
38
+ * Deduped event-variable names referenced by System ACEs anywhere in a sheet's event tree.
39
+ * Walks every condition and action via `visitEvents`, applying c3source's
40
+ * `getEventVarReferenceName` (which gates on `objectClass === "System"`).
41
+ */
42
+ export function extractEventVarRefs(sheet) {
43
+ const names = new Set();
44
+ visitEvents(sheet.events, (event) => {
45
+ if (hasConditions(event)) {
46
+ for (const cond of event.conditions) {
47
+ const name = getEventVarReferenceName(cond);
48
+ if (name !== null)
49
+ names.add(name);
50
+ }
51
+ }
52
+ if (hasActions(event)) {
53
+ for (const action of event.actions) {
54
+ const name = getEventVarReferenceName(action);
55
+ if (name !== null)
56
+ names.add(name);
57
+ }
58
+ }
59
+ });
60
+ return [...names];
61
+ }
62
+ export async function loadConfig(projectRoot, fileName) {
63
+ const cfg = await loadProjectConfig(projectRoot, fileName, DomainConfigSchema);
64
+ if (isMcpError(cfg)) {
65
+ const text = cfg.content?.map((c) => ("text" in c ? c.text : "")).join("\n") ?? "config load failed";
66
+ throw new Error(text);
67
+ }
68
+ return cfg;
69
+ }
70
+ /** Directories that are structural layers, not domain-relevant. Recurse into them. */
71
+ const LAYER_DIRS = ["shared", "c3-runtime"];
72
+ export function findScriptEntries(scriptsDir) {
73
+ const entries = [];
74
+ // A missing scripts/ dir is legitimate (a C3 project may have no scripts) —
75
+ // treat it as empty rather than throwing, matching how c3source's
76
+ // findAllEventSheets/findAllLayouts tolerate absent section dirs (ADR 0008).
77
+ if (!fs.existsSync(scriptsDir))
78
+ return entries;
79
+ function scanDir(dir, prefix) {
80
+ const names = fs.readdirSync(dir).sort();
81
+ for (const name of names) {
82
+ const fullPath = path.join(dir, name);
83
+ const stats = fs.statSync(fullPath);
84
+ if (stats.isDirectory()) {
85
+ if (LAYER_DIRS.includes(name)) {
86
+ // Recurse into layer dirs — enumerate their children instead
87
+ scanDir(fullPath, `${prefix}${name}/`);
88
+ }
89
+ else {
90
+ entries.push({ relativePath: `scripts/${prefix}${name}/`, isDirectory: true });
91
+ }
92
+ }
93
+ else if (stats.isFile() && name.endsWith(".ts")) {
94
+ entries.push({ relativePath: `scripts/${prefix}${name}`, isDirectory: false });
95
+ }
96
+ }
97
+ }
98
+ scanDir(scriptsDir, "");
99
+ return entries;
100
+ }
101
+ export function computeDomainData(rootDir, config, log = () => { }) {
102
+ // Find all files
103
+ const project = openProject(rootDir);
104
+ const eventSheetPaths = project.findAllEventSheets();
105
+ const layoutPaths = project.findAllLayouts();
106
+ const scriptEntries = findScriptEntries(project.scriptsDir);
107
+ log(`Found ${eventSheetPaths.length} eventSheets, ${layoutPaths.length} layouts, ${scriptEntries.length} script entries.`);
108
+ // Classify all files
109
+ const domainDataMap = new Map();
110
+ const unclassified = [];
111
+ // Initialize domain data for all configured domains
112
+ for (const [name, def] of Object.entries(config.domains)) {
113
+ domainDataMap.set(name, {
114
+ name,
115
+ description: def.description,
116
+ eventSheets: [],
117
+ layouts: [],
118
+ scripts: [],
119
+ functions: [],
120
+ includesFrom: new Map(),
121
+ includedBy: new Map(),
122
+ referencesFrom: new Map(),
123
+ referencedBy: new Map(),
124
+ strategy: def.strategy,
125
+ });
126
+ }
127
+ // Initialize domain data for shared subdomains
128
+ if (config.sharedSubdomains) {
129
+ for (const [name, def] of Object.entries(config.sharedSubdomains)) {
130
+ domainDataMap.set(name, {
131
+ name,
132
+ description: def.description,
133
+ eventSheets: [],
134
+ layouts: [],
135
+ scripts: [],
136
+ functions: [],
137
+ includesFrom: new Map(),
138
+ includedBy: new Map(),
139
+ referencesFrom: new Map(),
140
+ referencedBy: new Map(),
141
+ isSharedSubdomain: true,
142
+ strategy: def.strategy,
143
+ });
144
+ }
145
+ }
146
+ // Classify and parse eventSheets
147
+ const sheetDomainLookup = new Map(); // sheetName → domainName
148
+ const rawIncludes = new Map(); // domainName → raw include sheet names
149
+ const varDeclIndex = new Map(); // variable name → set of declaring domains
150
+ const rawRefs = new Map(); // domainName → referenced variable names (raw)
151
+ for (const sheetPath of eventSheetPaths) {
152
+ const relPath = path.relative(rootDir, sheetPath).replace(/\\/g, "/");
153
+ const domain = classifyFile(relPath, "eventSheet", config);
154
+ if (!domain) {
155
+ unclassified.push(relPath);
156
+ log(` Unclassified: ${relPath}`);
157
+ continue;
158
+ }
159
+ const domainData = domainDataMap.get(domain);
160
+ // Determine directory within eventSheets/
161
+ const innerPath = relPath.replace(/^eventSheets\//, "");
162
+ const dirParts = innerPath.split("/");
163
+ const directory = dirParts.length > 1 ? dirParts.slice(0, -1).join("/") : "";
164
+ domainData.eventSheets.push({ path: relPath, directory });
165
+ // Parse eventSheet for includes and functions
166
+ const content = fs.readFileSync(sheetPath, "utf-8");
167
+ const sheet = JSON.parse(content);
168
+ const sheetName = innerPath.replace(/\.json$/, "");
169
+ sheetDomainLookup.set(sheet.name, domain);
170
+ // Extract functions
171
+ const funcs = extractFunctionDefs(sheet, sheetName);
172
+ domainData.functions.push(...funcs);
173
+ // Extract includes (will be resolved to cross-domain deps later)
174
+ const includes = extractIncludes(sheet).map((r) => r.includeSheet);
175
+ if (includes.length > 0) {
176
+ const existing = rawIncludes.get(domain) ?? [];
177
+ existing.push(...includes);
178
+ rawIncludes.set(domain, existing);
179
+ }
180
+ // Index top-level variable declarations: variable name → declaring domains
181
+ for (const varName of extractEventVarDecls(sheet)) {
182
+ if (!varDeclIndex.has(varName))
183
+ varDeclIndex.set(varName, new Set());
184
+ varDeclIndex.get(varName).add(domain);
185
+ }
186
+ // Accumulate event-variable references for cross-domain resolution later
187
+ const refs = extractEventVarRefs(sheet);
188
+ if (refs.length > 0) {
189
+ const existing = rawRefs.get(domain) ?? [];
190
+ existing.push(...refs);
191
+ rawRefs.set(domain, existing);
192
+ }
193
+ }
194
+ // Classify layouts
195
+ for (const layoutPath of layoutPaths) {
196
+ const relPath = path.relative(rootDir, layoutPath).replace(/\\/g, "/");
197
+ const domain = classifyFile(relPath, "layout", config);
198
+ if (!domain) {
199
+ unclassified.push(relPath);
200
+ log(` Unclassified: ${relPath}`);
201
+ continue;
202
+ }
203
+ const domainData = domainDataMap.get(domain);
204
+ // Read layout to get eventSheet reference
205
+ const content = fs.readFileSync(layoutPath, "utf-8");
206
+ const layout = JSON.parse(content);
207
+ const eventSheet = layout.eventSheet || "";
208
+ const eventSheetDomain = eventSheet ? (sheetDomainLookup.get(eventSheet) ?? "") : "";
209
+ domainData.layouts.push({ path: relPath, eventSheet, eventSheetDomain });
210
+ }
211
+ // Classify scripts
212
+ for (const entry of scriptEntries) {
213
+ const lookupPath = entry.isDirectory
214
+ ? entry.relativePath.replace(/\/$/, "")
215
+ : entry.relativePath;
216
+ const domain = classifyFile(lookupPath, "script", config);
217
+ if (domain) {
218
+ domainDataMap.get(domain).scripts.push({ path: entry.relativePath, isDirectory: entry.isDirectory });
219
+ }
220
+ else {
221
+ unclassified.push(entry.relativePath);
222
+ log(` Unclassified: ${entry.relativePath}`);
223
+ }
224
+ }
225
+ // Resolve cross-domain dependencies from includes
226
+ for (const [domainName, domainData] of domainDataMap) {
227
+ const raw = rawIncludes.get(domainName) ?? [];
228
+ for (const includedSheetName of raw) {
229
+ const targetDomain = sheetDomainLookup.get(includedSheetName);
230
+ if (targetDomain && targetDomain !== domainName) {
231
+ // Add to includesFrom
232
+ if (!domainData.includesFrom.has(targetDomain)) {
233
+ domainData.includesFrom.set(targetDomain, []);
234
+ }
235
+ const list = domainData.includesFrom.get(targetDomain);
236
+ if (!list.includes(includedSheetName)) {
237
+ list.push(includedSheetName);
238
+ }
239
+ // Add to target's includedBy
240
+ const targetData = domainDataMap.get(targetDomain);
241
+ if (targetData) {
242
+ if (!targetData.includedBy.has(domainName)) {
243
+ targetData.includedBy.set(domainName, []);
244
+ }
245
+ const targetList = targetData.includedBy.get(domainName);
246
+ if (!targetList.includes(includedSheetName)) {
247
+ targetList.push(includedSheetName);
248
+ }
249
+ }
250
+ }
251
+ }
252
+ }
253
+ // Resolve cross-domain dependencies from event-variable references.
254
+ // A reference resolves to EVERY domain that declares a top-level variable of that
255
+ // name (attribute-to-all on collision); same-domain and unresolved names are skipped.
256
+ for (const [domainName, domainData] of domainDataMap) {
257
+ const refs = rawRefs.get(domainName) ?? [];
258
+ for (const varName of refs) {
259
+ const declaringDomains = varDeclIndex.get(varName);
260
+ if (!declaringDomains)
261
+ continue; // unresolved — no global declaration
262
+ for (const targetDomain of declaringDomains) {
263
+ if (targetDomain === domainName)
264
+ continue; // same-domain — not cross-domain
265
+ // referencesFrom: domainName → targetDomain (var names)
266
+ if (!domainData.referencesFrom.has(targetDomain))
267
+ domainData.referencesFrom.set(targetDomain, []);
268
+ const out = domainData.referencesFrom.get(targetDomain);
269
+ if (!out.includes(varName))
270
+ out.push(varName);
271
+ // referencedBy on the target
272
+ const targetData = domainDataMap.get(targetDomain);
273
+ if (targetData) {
274
+ if (!targetData.referencedBy.has(domainName))
275
+ targetData.referencedBy.set(domainName, []);
276
+ const inc = targetData.referencedBy.get(domainName);
277
+ if (!inc.includes(varName))
278
+ inc.push(varName);
279
+ }
280
+ }
281
+ }
282
+ }
283
+ // Sort domains by name for consistent output
284
+ const domains = Array.from(domainDataMap.values()).sort((a, b) => a.name.localeCompare(b.name));
285
+ return { domains, unclassified };
286
+ }
287
+ export async function generateDomainIndex(rootDir, outDir, projectRoot, fileName, log = console.log) {
288
+ const config = await loadConfig(projectRoot, fileName);
289
+ const domainIndexDir = path.join(outDir, "domain-index");
290
+ const { domains, unclassified } = computeDomainData(rootDir, config, log);
291
+ // Clean domain-index/ directory
292
+ fs.rmSync(domainIndexDir, { recursive: true, force: true });
293
+ fs.mkdirSync(domainIndexDir, { recursive: true });
294
+ // Generate master index
295
+ const indexContent = formatDomainIndexPage(domains, unclassified);
296
+ fs.writeFileSync(path.join(domainIndexDir, "index.md"), indexContent);
297
+ // Generate per-domain pages
298
+ for (const domain of domains) {
299
+ const pageContent = formatDomainPage(domain);
300
+ // Sanitize domain name for filename (e.g., "Watch/Story" → "Watch-Story")
301
+ const safeFileName = domain.name.replace(/\//g, "-");
302
+ fs.writeFileSync(path.join(domainIndexDir, `${safeFileName}.md`), pageContent);
303
+ }
304
+ log(`Generated domain index with ${domains.length} domains in ${domainIndexDir}`);
305
+ if (unclassified.length > 0) {
306
+ log(` ${unclassified.length} unclassified files!`);
307
+ }
308
+ else {
309
+ log(" All files classified.");
310
+ }
311
+ }
312
+ //# sourceMappingURL=domainGenerator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"domainGenerator.js","sourceRoot":"","sources":["../../src/domain/domainGenerator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import type { EditorValidationIssue } from "@genvidtech/c3source";
2
+ import type { Logger } from "@genvidtech/mcp-utils";
3
+ import type { DomainConfig } from "./types.js";
4
+ export interface EditorStrictnessSheetReport {
5
+ /** Relative POSIX path, e.g. "eventSheets/Login/LoginEvents.json". */
6
+ sheet: string;
7
+ /** Owning domain name from classifyFile, or "(unclassified)". */
8
+ domain: string;
9
+ /** Issues from c3source's validateForEditor for this sheet. */
10
+ issues: EditorValidationIssue[];
11
+ }
12
+ export interface EditorStrictnessReport {
13
+ /** Only sheets that HAVE at least one issue, sorted by sheet path. */
14
+ sheets: EditorStrictnessSheetReport[];
15
+ totalIssues: number;
16
+ }
17
+ export declare function validateEditorStrictness(rootDir: string, config: DomainConfig, log?: Logger): EditorStrictnessReport;
18
+ export declare function formatEditorStrictnessReport(report: EditorStrictnessReport): string;
19
+ //# sourceMappingURL=editorValidation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"editorValidation.d.ts","sourceRoot":"","sources":["../../src/domain/editorValidation.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAc,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC9E,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAEpD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,MAAM,WAAW,2BAA2B;IAC1C,sEAAsE;IACtE,KAAK,EAAE,MAAM,CAAC;IACd,iEAAiE;IACjE,MAAM,EAAE,MAAM,CAAC;IACf,+DAA+D;IAC/D,MAAM,EAAE,qBAAqB,EAAE,CAAC;CACjC;AAED,MAAM,WAAW,sBAAsB;IACrC,sEAAsE;IACtE,MAAM,EAAE,2BAA2B,EAAE,CAAC;IACtC,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,YAAY,EACpB,GAAG,GAAE,MAAiB,GACrB,sBAAsB,CA4BxB;AAED,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,sBAAsB,GAAG,MAAM,CAenF"}
@@ -0,0 +1,40 @@
1
+ import * as fs from "node:fs";
2
+ import * as path from "node:path";
3
+ import { openProject, validateForEditor } from "@genvidtech/c3source";
4
+ import { classifyFile } from "./classification.js";
5
+ export function validateEditorStrictness(rootDir, config, log = () => { }) {
6
+ const project = openProject(rootDir);
7
+ if (!project.hasEventSheets()) {
8
+ log(`editorValidation: eventSheets/ dir not found at ${project.eventSheetsDir}, skipping.`);
9
+ return { sheets: [], totalIssues: 0 };
10
+ }
11
+ const sheetPaths = project.findAllEventSheets();
12
+ const results = [];
13
+ for (const sheetPath of sheetPaths) {
14
+ const relPath = path.relative(rootDir, sheetPath).replace(/\\/g, "/");
15
+ const domainName = classifyFile(relPath, "eventSheet", config) ?? "(unclassified)";
16
+ const content = fs.readFileSync(sheetPath, "utf-8");
17
+ const sheet = JSON.parse(content);
18
+ const issues = validateForEditor(sheet);
19
+ if (issues.length > 0) {
20
+ results.push({ sheet: relPath, domain: domainName, issues });
21
+ }
22
+ }
23
+ results.sort((a, b) => a.sheet.localeCompare(b.sheet));
24
+ const totalIssues = results.reduce((sum, r) => sum + r.issues.length, 0);
25
+ return { sheets: results, totalIssues };
26
+ }
27
+ export function formatEditorStrictnessReport(report) {
28
+ if (report.totalIssues === 0) {
29
+ return "No editor-strictness issues found.";
30
+ }
31
+ const lines = [`${report.totalIssues} editor-strictness issue(s) found:`, ""];
32
+ for (const sheetReport of report.sheets) {
33
+ lines.push(`${sheetReport.sheet} [${sheetReport.domain}]`);
34
+ for (const issue of sheetReport.issues) {
35
+ lines.push(` [${issue.rule}] ${issue.path}: ${issue.message}`);
36
+ }
37
+ }
38
+ return lines.join("\n");
39
+ }
40
+ //# sourceMappingURL=editorValidation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"editorValidation.js","sourceRoot":"","sources":["../../src/domain/editorValidation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAGtE,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAkBnD,MAAM,UAAU,wBAAwB,CACtC,OAAe,EACf,MAAoB,EACpB,MAAc,GAAG,EAAE,GAAE,CAAC;IAEtB,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;IACrC,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC;QAC9B,GAAG,CAAC,mDAAmD,OAAO,CAAC,cAAc,aAAa,CAAC,CAAC;QAC5F,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC;IACxC,CAAC;IACD,MAAM,UAAU,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC;IAEhD,MAAM,OAAO,GAAkC,EAAE,CAAC;IAElD,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QACtE,MAAM,UAAU,GAAG,YAAY,CAAC,OAAO,EAAE,YAAY,EAAE,MAAM,CAAC,IAAI,gBAAgB,CAAC;QAEnF,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QACpD,MAAM,KAAK,GAAe,IAAI,CAAC,KAAK,CAAC,OAAO,CAAe,CAAC;QAE5D,MAAM,MAAM,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;QACxC,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtB,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,CAAC;QAC/D,CAAC;IACH,CAAC;IAED,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;IAEvD,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAEzE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC;AAC1C,CAAC;AAED,MAAM,UAAU,4BAA4B,CAAC,MAA8B;IACzE,IAAI,MAAM,CAAC,WAAW,KAAK,CAAC,EAAE,CAAC;QAC7B,OAAO,oCAAoC,CAAC;IAC9C,CAAC;IAED,MAAM,KAAK,GAAa,CAAC,GAAG,MAAM,CAAC,WAAW,oCAAoC,EAAE,EAAE,CAAC,CAAC;IAExF,KAAK,MAAM,WAAW,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QACxC,KAAK,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,KAAK,KAAK,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC;QAC3D,KAAK,MAAM,KAAK,IAAI,WAAW,CAAC,MAAM,EAAE,CAAC;YACvC,KAAK,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QAClE,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
@@ -0,0 +1,16 @@
1
+ import type { DomainConfig, DomainData } from "./types.js";
2
+ /**
3
+ * Format the domain index page (master overview of all domains).
4
+ */
5
+ export declare function formatDomainIndex(domains: DomainData[], unclassified: string[]): string;
6
+ /**
7
+ * Format a single domain's detail page.
8
+ */
9
+ export declare function formatDomainPage(domain: DomainData): string;
10
+ export type DomainConfigSection = "domains" | "sharedSubdomains" | "overrides" | "all";
11
+ /**
12
+ * Format a DomainConfig into human-readable text.
13
+ * When section is "all", all three sections are concatenated with blank line separators.
14
+ */
15
+ export declare function formatDomainConfig(config: DomainConfig, section?: DomainConfigSection): string;
16
+ //# sourceMappingURL=formatting.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatting.d.ts","sourceRoot":"","sources":["../../src/domain/formatting.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAe,MAAM,YAAY,CAAC;AAIxE;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,UAAU,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,MAAM,CAmHvF;AA6DD;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,CA8B3D;AA8GD,MAAM,MAAM,mBAAmB,GAAG,SAAS,GAAG,kBAAkB,GAAG,WAAW,GAAG,KAAK,CAAC;AAEvF;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,YAAY,EAAE,OAAO,GAAE,mBAA2B,GAAG,MAAM,CAYrG"}