@noyrax/documentation-system-plugin 1.0.4-beta.3 → 1.0.4-beta.4

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 (197) hide show
  1. package/out/cache/ast-cache.js +69 -0
  2. package/out/cache/ast-cache.js.map +1 -0
  3. package/out/cache/dependencies-cache.js +73 -0
  4. package/out/cache/dependencies-cache.js.map +1 -0
  5. package/out/cache/output-cache.js +69 -0
  6. package/out/cache/output-cache.js.map +1 -0
  7. package/out/cache/signature-cache.js +60 -0
  8. package/out/cache/signature-cache.js.map +1 -0
  9. package/out/cli/generate-cli.js +341 -0
  10. package/out/cli/generate-cli.js.map +1 -0
  11. package/out/cli/scan-cli.js +157 -0
  12. package/out/cli/scan-cli.js.map +1 -0
  13. package/out/cli/validate-cli.js +258 -0
  14. package/out/cli/validate-cli.js.map +1 -0
  15. package/out/core/async.js +38 -0
  16. package/out/core/async.js.map +1 -0
  17. package/out/core/consolidation.js +230 -0
  18. package/out/core/consolidation.js.map +1 -0
  19. package/out/core/git.js +48 -0
  20. package/out/core/git.js.map +1 -0
  21. package/out/core/language-detection.js +29 -0
  22. package/out/core/language-detection.js.map +1 -0
  23. package/out/core/scanner.js +180 -0
  24. package/out/core/scanner.js.map +1 -0
  25. package/out/core/signature-formatter.js +162 -0
  26. package/out/core/signature-formatter.js.map +1 -0
  27. package/out/core/symbol-classifier.js +96 -0
  28. package/out/core/symbol-classifier.js.map +1 -0
  29. package/out/core/symbols.js +24 -0
  30. package/out/core/symbols.js.map +1 -0
  31. package/out/drift/index.js +28 -0
  32. package/out/drift/index.js.map +1 -0
  33. package/out/extension.js +984 -0
  34. package/out/extension.js.map +1 -0
  35. package/out/generator/adr-linker.js +216 -0
  36. package/out/generator/adr-linker.js.map +1 -0
  37. package/out/generator/change-report.js +124 -0
  38. package/out/generator/change-report.js.map +1 -0
  39. package/out/generator/dependency-graph.js +98 -0
  40. package/out/generator/dependency-graph.js.map +1 -0
  41. package/out/generator/index.js +117 -0
  42. package/out/generator/index.js.map +1 -0
  43. package/out/generator/module-doc.js +438 -0
  44. package/out/generator/module-doc.js.map +1 -0
  45. package/out/generator/system-metadata.js +202 -0
  46. package/out/generator/system-metadata.js.map +1 -0
  47. package/out/index/index.js +161 -0
  48. package/out/index/index.js.map +1 -0
  49. package/out/logging/index.js +24 -0
  50. package/out/logging/index.js.map +1 -0
  51. package/out/parsers/dependencies.js +126 -0
  52. package/out/parsers/dependencies.js.map +1 -0
  53. package/out/parsers/json-yaml.js +121 -0
  54. package/out/parsers/json-yaml.js.map +1 -0
  55. package/out/parsers/python.js +160 -0
  56. package/out/parsers/python.js.map +1 -0
  57. package/out/parsers/ts-js.js +598 -0
  58. package/out/parsers/ts-js.js.map +1 -0
  59. package/out/parsers/types.js +3 -0
  60. package/out/parsers/types.js.map +1 -0
  61. package/out/ui/commands-provider.js +91 -0
  62. package/out/ui/commands-provider.js.map +1 -0
  63. package/out/ui/status-bar.js +85 -0
  64. package/out/ui/status-bar.js.map +1 -0
  65. package/out/validator/index.js +185 -0
  66. package/out/validator/index.js.map +1 -0
  67. package/out/validator/signature-matching.js +261 -0
  68. package/out/validator/signature-matching.js.map +1 -0
  69. package/out/validator/status.js +38 -0
  70. package/out/validator/status.js.map +1 -0
  71. package/package.json +9 -1
  72. package/.vscodeignore +0 -41
  73. package/MCP_SERVER_SETUP.md +0 -371
  74. package/assets/icon.svg +0 -27
  75. package/docs/LINKEDIN_ANTWORT_SEQUENZDIAGRAMME.md +0 -190
  76. package/docs/SEQUENZDIAGRAMM_BEWEIS.md +0 -469
  77. package/docs/SEQUENZDIAGRAMM_VALIDATE_FLOW.md +0 -282
  78. package/docs/adr/001-signatur-abweichung-fix.md +0 -54
  79. package/docs/adr/002-file-specific-validation-1.0.1.md +0 -45
  80. package/docs/adr/003-documentation-generation-bugs.md +0 -134
  81. package/docs/adr/004-validator-signature-matching-fix.md +0 -121
  82. package/docs/adr/005-validator-generic-simplification-tightening.md +0 -35
  83. package/docs/adr/006-parser-variable-type-extraction.md +0 -33
  84. package/docs/adr/007-ts-parser-load-libs-for-accurate-types.md +0 -31
  85. package/docs/adr/008-dependencies-cache-phase1.md +0 -133
  86. package/docs/adr/009-consolidation-union-logic-phase1-2.md +0 -147
  87. package/docs/adr/010-extension-union-integration-phase1-3-and-phase2.md +0 -179
  88. package/docs/adr/011-module-doc-change-tracking-phase3.md +0 -190
  89. package/docs/adr/012-git-deletions-change-report-phase4.md +0 -235
  90. package/docs/adr/013-system-functionality-fixes.md +0 -279
  91. package/docs/adr/014-rules-migration-und-mcp-integration.md +0 -113
  92. package/docs/adr/015-global-agent-package.md +0 -158
  93. package/docs/adr/016-produktisierung-docguard.md +0 -193
  94. package/docs/adr/017-signature-matching-optional-fields.md +0 -128
  95. package/docs/adr/018-rebranding-docguard-to-noyrax.md +0 -109
  96. package/docs/adr/019-system-schwachstellen-analyse-und-fixes.md +0 -204
  97. package/docs/adr/020-api-doc-tiefe-und-signatureformatter.md +0 -74
  98. package/docs/adr/021-semantic-api-docs-and-symbol-classifier.md +0 -125
  99. package/docs/adr/022-semantic-class-and-constants-rendering.md +0 -82
  100. package/docs/adr/023-adr-verknuepfung-modul-doku.md +0 -54
  101. package/docs/adr/024-cursor-rules-mehrdimensionaler-raum.md +0 -230
  102. package/docs/adr/025-mcp-tools-scan-validate-cli-bridge.md +0 -202
  103. package/docs/adr/026-reality-driven-development-system.md +0 -173
  104. package/docs/adr/027-scanner-excludes-and-union-logic-fix.md +0 -189
  105. package/docs/adr/028-src-coverage-union-resync.md +0 -124
  106. package/docs/adr/029-parser-flow-kopplung-und-sync-drift-modi.md +0 -102
  107. package/docs/adr/030-dependency-import-symbol-names-preservation.md +0 -123
  108. package/docs/adr/031-generate-cli-vollstaendige-dokumentation.md +0 -99
  109. package/docs/adr/032-windows-optimized-verification-scripts.md +0 -165
  110. package/docs/adr/036-enhanced-dependency-metadata.md +0 -190
  111. package/docs/adr/TEMPLATE.md +0 -76
  112. package/docs/index/symbols.jsonl +0 -78
  113. package/docs/modules/action__action.yml.md +0 -50
  114. package/docs/modules/documentation.config.schema.json.md +0 -37
  115. package/docs/modules/mcp__package.json.md +0 -130
  116. package/docs/modules/mcp__src__resources__docs.ts.md +0 -94
  117. package/docs/modules/mcp__src__server.ts.md +0 -15
  118. package/docs/modules/mcp__src__tools__drift.ts.md +0 -114
  119. package/docs/modules/mcp__src__tools__impact.ts.md +0 -130
  120. package/docs/modules/mcp__src__tools__scan.ts.md +0 -75
  121. package/docs/modules/mcp__src__tools__validate.ts.md +0 -116
  122. package/docs/modules/mcp__src__tools__verify-adrs.ts.md +0 -106
  123. package/docs/modules/mcp__tsconfig.json.md +0 -22
  124. package/docs/modules/package.json.md +0 -130
  125. package/docs/modules/packages__doc-system-agent__examples__basic-project__package.json.md +0 -43
  126. package/docs/modules/packages__doc-system-agent__examples__basic-project__src__calculator.ts.md +0 -81
  127. package/docs/modules/packages__doc-system-agent__package.json.md +0 -154
  128. package/docs/modules/packages__doc-system-agent__src__cli__index.ts.md +0 -8
  129. package/docs/modules/packages__doc-system-agent__src__cli__init.ts.md +0 -93
  130. package/docs/modules/packages__doc-system-agent__src__cli__update.ts.md +0 -113
  131. package/docs/modules/packages__doc-system-agent__src__constants.ts.md +0 -29
  132. package/docs/modules/packages__doc-system-agent__src__index.ts.md +0 -234
  133. package/docs/modules/packages__doc-system-agent__src__mcp__resources__docs.ts.md +0 -94
  134. package/docs/modules/packages__doc-system-agent__src__mcp__server.ts.md +0 -17
  135. package/docs/modules/packages__doc-system-agent__src__mcp__tools__drift.ts.md +0 -38
  136. package/docs/modules/packages__doc-system-agent__src__mcp__tools__impact.ts.md +0 -75
  137. package/docs/modules/packages__doc-system-agent__src__mcp__tools__scan.ts.md +0 -23
  138. package/docs/modules/packages__doc-system-agent__src__mcp__tools__validate.ts.md +0 -23
  139. package/docs/modules/packages__doc-system-agent__src__mcp__tools__verify-adrs.ts.md +0 -106
  140. package/docs/modules/packages__doc-system-agent__src__mcp__types.ts.md +0 -355
  141. package/docs/modules/packages__doc-system-agent__tsconfig.json.md +0 -22
  142. package/docs/modules/scripts__verify-adrs.js.md +0 -97
  143. package/docs/modules/scripts__verify-architecture.js.md +0 -93
  144. package/docs/modules/scripts__verify-imports.js.md +0 -114
  145. package/docs/modules/src____tests____setup.ts.md +0 -8
  146. package/docs/modules/src____tests____signature-formatter.test.ts.md +0 -16
  147. package/docs/modules/src____tests____snapshot-doc-generation.test.ts.md +0 -8
  148. package/docs/modules/src____tests____symbol-classifier.test.ts.md +0 -16
  149. package/docs/modules/src__cache__ast-cache.ts.md +0 -91
  150. package/docs/modules/src__cache__dependencies-cache.ts.md +0 -89
  151. package/docs/modules/src__cache__output-cache.ts.md +0 -91
  152. package/docs/modules/src__cache__signature-cache.ts.md +0 -76
  153. package/docs/modules/src__cli__generate-cli.ts.md +0 -130
  154. package/docs/modules/src__cli__scan-cli.ts.md +0 -99
  155. package/docs/modules/src__cli__validate-cli.ts.md +0 -144
  156. package/docs/modules/src__core__async.ts.md +0 -18
  157. package/docs/modules/src__core__consolidation.ts.md +0 -157
  158. package/docs/modules/src__core__git.ts.md +0 -35
  159. package/docs/modules/src__core__language-detection.ts.md +0 -31
  160. package/docs/modules/src__core__scanner.ts.md +0 -100
  161. package/docs/modules/src__core__signature-formatter.ts.md +0 -232
  162. package/docs/modules/src__core__symbol-classifier.ts.md +0 -178
  163. package/docs/modules/src__core__symbols.ts.md +0 -31
  164. package/docs/modules/src__drift__index.ts.md +0 -53
  165. package/docs/modules/src__extension.ts.md +0 -418
  166. package/docs/modules/src__generator__adr-linker.ts.md +0 -154
  167. package/docs/modules/src__generator__change-report.ts.md +0 -85
  168. package/docs/modules/src__generator__dependency-graph.ts.md +0 -63
  169. package/docs/modules/src__generator__index.ts.md +0 -40
  170. package/docs/modules/src__generator__module-doc.ts.md +0 -242
  171. package/docs/modules/src__index__index.ts.md +0 -159
  172. package/docs/modules/src__logging__index.ts.md +0 -87
  173. package/docs/modules/src__parsers__dependencies.ts.md +0 -69
  174. package/docs/modules/src__parsers__json-yaml.ts.md +0 -96
  175. package/docs/modules/src__parsers__python.ts.md +0 -73
  176. package/docs/modules/src__parsers__ts-js.ts.md +0 -48
  177. package/docs/modules/src__parsers__types.ts.md +0 -117
  178. package/docs/modules/src__ui__commands-provider.ts.md +0 -70
  179. package/docs/modules/src__ui__status-bar.ts.md +0 -79
  180. package/docs/modules/src__validator__index.ts.md +0 -211
  181. package/docs/modules/src__validator__signature-matching.ts.md +0 -209
  182. package/docs/modules/src__validator__status.ts.md +0 -72
  183. package/docs/modules/test-mcp-resources.js.md +0 -27
  184. package/docs/modules/tsconfig.json.md +0 -22
  185. package/docs/system/CHANGE_REPORT.md +0 -26
  186. package/docs/system/DEPENDENCIES.md +0 -403
  187. package/docs/system/DEPENDENCY_GRAPH.md +0 -336
  188. package/docs/system/NAVIGATION_SPACE_ANALYSIS.md +0 -244
  189. package/docs/system/NPX_CACHE_FIX.md +0 -85
  190. package/docs/system/NPX_LOCAL_USAGE.md +0 -66
  191. package/docs/system/PLUGIN_ECOSYSTEM_STATUS.md +0 -465
  192. package/docs/system/PLUGIN_UPDATE_GUIDE.md +0 -212
  193. package/docs/system/RULES_UPDATE_GUIDE.md +0 -182
  194. package/docs/system/SYSTEM_ANALYSIS.md +0 -947
  195. package/docs/system/SYSTEM_METADATA.json +0 -37
  196. package/documentation.config.schema.json +0 -77
  197. package/publish.ps1 +0 -21
@@ -0,0 +1,117 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.generatePerFileDocs = void 0;
27
+ const fs = __importStar(require("node:fs"));
28
+ const path = __importStar(require("node:path"));
29
+ const module_doc_1 = require("./module-doc");
30
+ const adr_linker_1 = require("./adr-linker");
31
+ /**
32
+ * @public
33
+ * Make safe file name from module path
34
+ */
35
+ function makeSafeFileName(filePath) {
36
+ return filePath.replace(/[<>:"|?*]/g, '_').replace(/\//g, '__');
37
+ }
38
+ /**
39
+ * @public
40
+ * Generate per-file documentation with change tracking
41
+ */
42
+ function generatePerFileDocs(symbols, modulesDir, existingDocs) {
43
+ const grouped = new Map();
44
+ const typeOrder = { module: 0, class: 1, interface: 2, enum: 3, method: 4, function: 5, variable: 6, type: 7 };
45
+ const sorted = [...symbols].sort((a, b) => {
46
+ if (a.filePath !== b.filePath)
47
+ return a.filePath.localeCompare(b.filePath);
48
+ const to = (k) => (typeOrder[k] ?? 99);
49
+ if (to(a.kind) !== to(b.kind))
50
+ return to(a.kind) - to(b.kind);
51
+ return a.fullyQualifiedName.localeCompare(b.fullyQualifiedName);
52
+ });
53
+ for (const s of sorted) {
54
+ const key = s.filePath;
55
+ if (!grouped.has(key))
56
+ grouped.set(key, []);
57
+ grouped.get(key).push(s);
58
+ }
59
+ // Create AdrLinker once for all files (performance optimization)
60
+ const adrDir = path.join(path.dirname(modulesDir), 'adr');
61
+ let adrLinker;
62
+ try {
63
+ if (fs.existsSync(adrDir)) {
64
+ adrLinker = new adr_linker_1.AdrLinker(adrDir);
65
+ // Debug: Log ADR mappings
66
+ const mappings = adrLinker.getAllAdrMappings();
67
+ if (mappings.size > 0) {
68
+ console.log(`[ADR-Linker] Loaded ${mappings.size} file path mappings from ${adrDir}`);
69
+ }
70
+ else {
71
+ console.log(`[ADR-Linker] No file path mappings found in ${adrDir}`);
72
+ }
73
+ }
74
+ else {
75
+ console.log(`[ADR-Linker] ADR directory does not exist: ${adrDir}`);
76
+ }
77
+ }
78
+ catch (err) {
79
+ // If ADR linking fails, continue without it
80
+ // This ensures the documentation generation doesn't break
81
+ console.error(`[ADR-Linker] Error creating AdrLinker: ${err}`);
82
+ }
83
+ const files = new Map();
84
+ for (const [filePath, syms] of grouped.entries()) {
85
+ const safeName = makeSafeFileName(filePath);
86
+ const targetPath = path.join(modulesDir, `${safeName}.md`);
87
+ // Load existing documentation if available
88
+ let existingDoc = { blocks: [] };
89
+ if (existingDocs && existingDocs.has(filePath)) {
90
+ try {
91
+ existingDoc = (0, module_doc_1.parseModuleDoc)(existingDocs.get(filePath));
92
+ }
93
+ catch (err) {
94
+ // If parsing fails, start fresh
95
+ existingDoc = { blocks: [] };
96
+ }
97
+ }
98
+ else if (fs.existsSync(targetPath)) {
99
+ try {
100
+ const content = fs.readFileSync(targetPath, 'utf8');
101
+ existingDoc = (0, module_doc_1.parseModuleDoc)(content);
102
+ }
103
+ catch (err) {
104
+ // If parsing fails, start fresh
105
+ existingDoc = { blocks: [] };
106
+ }
107
+ }
108
+ // Build documentation with change tracking
109
+ const newDoc = (0, module_doc_1.buildModuleDocWithChanges)(syms, existingDoc);
110
+ // Reuse AdrLinker instance for all files
111
+ const content = (0, module_doc_1.renderModuleDoc)(newDoc, filePath, adrLinker);
112
+ files.set(filePath, content);
113
+ }
114
+ return files;
115
+ }
116
+ exports.generatePerFileDocs = generatePerFileDocs;
117
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/generator/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,438 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.renderModuleDoc = exports.buildModuleDocWithChanges = exports.signatureChanged = exports.normalizeSignature = exports.parseModuleDoc = void 0;
4
+ const signature_formatter_1 = require("../core/signature-formatter");
5
+ const symbol_classifier_1 = require("../core/symbol-classifier");
6
+ /**
7
+ * @public
8
+ * Parse existing module documentation markdown
9
+ */
10
+ function parseModuleDoc(content) {
11
+ const blocks = [];
12
+ const lines = content.split(/\r?\n/);
13
+ let currentBlock = null;
14
+ let inCodeBlock = false;
15
+ let codeLines = [];
16
+ let currentComment = '';
17
+ for (let i = 0; i < lines.length; i++) {
18
+ const line = lines[i];
19
+ // HTML comment (change annotation)
20
+ const commentMatch = line.match(/^<!--\s*change:\s*(.+?)\s*-->$/);
21
+ if (commentMatch) {
22
+ currentComment = line;
23
+ continue;
24
+ }
25
+ // Header: ### kind: fullyQualifiedName
26
+ const headerMatch = line.match(/^###\s+(\w+):\s+(.+)$/);
27
+ if (headerMatch) {
28
+ // Save previous block if exists
29
+ if (currentBlock && currentBlock.fullyQualifiedName && currentBlock.symbol) {
30
+ blocks.push({
31
+ fullyQualifiedName: currentBlock.fullyQualifiedName,
32
+ kind: currentBlock.kind,
33
+ signature: currentBlock.signature,
34
+ comment: currentComment || '',
35
+ symbol: currentBlock.symbol
36
+ });
37
+ }
38
+ const kind = headerMatch[1];
39
+ const fullyQualifiedName = headerMatch[2];
40
+ currentBlock = {
41
+ fullyQualifiedName,
42
+ kind,
43
+ signature: { name: fullyQualifiedName.split('.').pop() || fullyQualifiedName, parameters: [] },
44
+ symbol: {
45
+ language: 'unknown',
46
+ filePath: '',
47
+ fullyQualifiedName,
48
+ signature: { name: fullyQualifiedName.split('.').pop() || fullyQualifiedName, parameters: [] },
49
+ kind
50
+ }
51
+ };
52
+ currentComment = '';
53
+ inCodeBlock = false;
54
+ codeLines = [];
55
+ continue;
56
+ }
57
+ // Code block start
58
+ if (line.trim() === '```ts' || line.trim() === '```') {
59
+ inCodeBlock = true;
60
+ codeLines = [];
61
+ continue;
62
+ }
63
+ // Code block end
64
+ if (inCodeBlock && line.trim() === '```') {
65
+ if (currentBlock && currentBlock.symbol && codeLines.length > 0) {
66
+ // Parse signature from code
67
+ const code = codeLines.join('\n');
68
+ currentBlock.signature = parseSignatureFromCode(code, currentBlock.kind);
69
+ currentBlock.symbol.signature = currentBlock.signature;
70
+ }
71
+ inCodeBlock = false;
72
+ codeLines = [];
73
+ continue;
74
+ }
75
+ if (inCodeBlock && currentBlock) {
76
+ codeLines.push(line);
77
+ }
78
+ }
79
+ // Save last block
80
+ if (currentBlock && currentBlock.fullyQualifiedName && currentBlock.symbol) {
81
+ blocks.push({
82
+ fullyQualifiedName: currentBlock.fullyQualifiedName,
83
+ kind: currentBlock.kind,
84
+ signature: currentBlock.signature,
85
+ comment: currentComment || '',
86
+ symbol: currentBlock.symbol
87
+ });
88
+ }
89
+ return { blocks };
90
+ }
91
+ exports.parseModuleDoc = parseModuleDoc;
92
+ /**
93
+ * @public
94
+ * Parse signature from code block
95
+ */
96
+ function parseSignatureFromCode(code, kind) {
97
+ const trimmed = code.trim();
98
+ if (kind === 'interface') {
99
+ const nameMatch = trimmed.match(/^interface\s+(\w+)/);
100
+ if (nameMatch) {
101
+ const name = nameMatch[1];
102
+ const params = [];
103
+ // Simple parameter extraction for interfaces
104
+ const propMatches = trimmed.matchAll(/\s+(\w+)(\?)?(?::\s*([^;]+))?;/g);
105
+ for (const match of propMatches) {
106
+ params.push({
107
+ name: match[1],
108
+ type: match[3] || undefined,
109
+ optional: !!match[2],
110
+ hasDefault: false
111
+ });
112
+ }
113
+ return { name, parameters: params, visibility: 'public' };
114
+ }
115
+ }
116
+ if (kind === 'class') {
117
+ const nameMatch = trimmed.match(/^class\s+(\w+)/);
118
+ if (nameMatch) {
119
+ return { name: nameMatch[1], parameters: [], visibility: 'public' };
120
+ }
121
+ }
122
+ if (kind === 'function' || kind === 'method') {
123
+ const funcMatch = trimmed.match(/^(\w+)\s*\(([^)]*)\)(?:\s*:\s*([^{]+))?/);
124
+ if (funcMatch) {
125
+ const name = funcMatch[1];
126
+ const paramsStr = funcMatch[2];
127
+ const returnType = funcMatch[3]?.trim();
128
+ const params = [];
129
+ if (paramsStr) {
130
+ const paramParts = paramsStr.split(',').map(p => p.trim()).filter(p => p);
131
+ for (const part of paramParts) {
132
+ const paramMatch = part.match(/^(\w+)(\?)?(?::\s*([^=]+))?(?:\s*=\s*…)?$/);
133
+ if (paramMatch) {
134
+ params.push({
135
+ name: paramMatch[1],
136
+ type: paramMatch[3]?.trim() || undefined,
137
+ optional: !!paramMatch[2],
138
+ hasDefault: part.includes('=')
139
+ });
140
+ }
141
+ }
142
+ }
143
+ return { name, parameters: params, returnType, visibility: 'public' };
144
+ }
145
+ }
146
+ if (kind === 'variable') {
147
+ const varMatch = trimmed.match(/^(\w+)(?:\s*:\s*([^=]+))?/);
148
+ if (varMatch) {
149
+ return { name: varMatch[1], parameters: [], returnType: varMatch[2]?.trim(), visibility: 'public' };
150
+ }
151
+ }
152
+ // Fallback
153
+ const nameMatch = trimmed.match(/^(\w+)/);
154
+ return { name: nameMatch?.[1] || 'unknown', parameters: [], visibility: 'public' };
155
+ }
156
+ /**
157
+ * @public
158
+ * Normalize signature for comparison
159
+ */
160
+ function normalizeSignature(sig) {
161
+ const params = sig.parameters
162
+ .map(p => `${p.name}${p.optional ? '?' : ''}:${p.type ?? ''}${p.hasDefault ? '=…' : ''}`)
163
+ .sort()
164
+ .join(',');
165
+ return `${sig.name}(${params}):${sig.returnType ?? ''}`;
166
+ }
167
+ exports.normalizeSignature = normalizeSignature;
168
+ /**
169
+ * Heuristik: Triviale Platzhalter-Signatur aus der alten Welt?
170
+ * Beispiel: "Snapshot():" (keine Parameter, kein Rückgabewert)
171
+ */
172
+ function isTrivialNormalizedSignature(sig) {
173
+ return /^[A-Za-z0-9_]+\(\):?$/.test(sig) || /^[A-Za-z0-9_]+\(\):$/.test(sig);
174
+ }
175
+ /**
176
+ * Heuristik: Handelt es sich um eine reine Formatter-Migration
177
+ * von einer Platzhalter-Signatur zu einer „tiefen“ Signatur?
178
+ */
179
+ function isFormatterMigration(oldSig, newSig) {
180
+ return isTrivialNormalizedSignature(oldSig) && !isTrivialNormalizedSignature(newSig);
181
+ }
182
+ /**
183
+ * @public
184
+ * Check if signature changed zwischen zwei Symbolen
185
+ */
186
+ function signatureChanged(a, b) {
187
+ return normalizeSignature(a.signature) !== normalizeSignature(b.signature);
188
+ }
189
+ exports.signatureChanged = signatureChanged;
190
+ /**
191
+ * @public
192
+ * Build module documentation with change tracking
193
+ */
194
+ function buildModuleDocWithChanges(symbols, existingDoc) {
195
+ const blocks = [];
196
+ const existingBlocksByName = new Map(existingDoc.blocks.map(b => [b.fullyQualifiedName, b]));
197
+ // For each symbol in code
198
+ for (const sym of symbols) {
199
+ const existingBlock = existingBlocksByName.get(sym.fullyQualifiedName);
200
+ if (!existingBlock) {
201
+ // Symbol is new
202
+ blocks.push({
203
+ comment: `<!-- change: symbol-added name="${sym.fullyQualifiedName}" kind="${sym.kind}" -->`,
204
+ symbol: sym
205
+ });
206
+ }
207
+ else if (signatureChanged(sym, existingBlock.symbol)) {
208
+ // Signature geändert – prüfen, ob es sich nur um eine
209
+ // Migration von Platzhalter- zu Tiefensignaturen handelt.
210
+ const oldSig = normalizeSignature(existingBlock.symbol.signature);
211
+ const newSig = normalizeSignature(sym.signature);
212
+ if (isFormatterMigration(oldSig, newSig)) {
213
+ // Nur Formatter-Migration – nicht als semantische Änderung melden
214
+ blocks.push({
215
+ comment: existingBlock.comment || '',
216
+ symbol: sym
217
+ });
218
+ }
219
+ else {
220
+ // Echte Signatur-Änderung
221
+ blocks.push({
222
+ comment: `<!-- change: signature-changed old="${oldSig}" new="${newSig}" -->`,
223
+ symbol: sym
224
+ });
225
+ }
226
+ }
227
+ else {
228
+ // Unverändert – bestehenden Kommentar übernehmen
229
+ blocks.push({
230
+ comment: existingBlock.comment || '',
231
+ symbol: sym
232
+ });
233
+ }
234
+ existingBlocksByName.delete(sym.fullyQualifiedName);
235
+ }
236
+ // For remaining blocks (no longer in code)
237
+ for (const [name, block] of existingBlocksByName.entries()) {
238
+ blocks.push({
239
+ comment: `<!-- change: symbol-removed name="${name}" kind="${block.symbol.kind}" -->`,
240
+ symbol: block.symbol
241
+ });
242
+ }
243
+ // Deterministic sort
244
+ blocks.sort(compareBlocks);
245
+ return { blocks };
246
+ }
247
+ exports.buildModuleDocWithChanges = buildModuleDocWithChanges;
248
+ /**
249
+ * @public
250
+ * Compare blocks for deterministic sorting
251
+ */
252
+ function compareBlocks(a, b) {
253
+ const typeOrder = {
254
+ module: 0, class: 1, interface: 2, enum: 3, method: 4, function: 5, variable: 6, type: 7
255
+ };
256
+ const to = (k) => (typeOrder[k] ?? 99);
257
+ const ca = (0, symbol_classifier_1.classifySymbol)(a.symbol);
258
+ const cb = (0, symbol_classifier_1.classifySymbol)(b.symbol);
259
+ const roleOrder = {
260
+ 'service-api': 0,
261
+ 'domain-model': 1,
262
+ config: 2,
263
+ other: 3,
264
+ infra: 4
265
+ };
266
+ const priorityOrder = {
267
+ high: 0,
268
+ normal: 1,
269
+ low: 2
270
+ };
271
+ if (to(a.symbol.kind) !== to(b.symbol.kind)) {
272
+ return to(a.symbol.kind) - to(b.symbol.kind);
273
+ }
274
+ const roleA = roleOrder[ca.role] ?? 99;
275
+ const roleB = roleOrder[cb.role] ?? 99;
276
+ if (roleA !== roleB) {
277
+ return roleA - roleB;
278
+ }
279
+ const prioA = priorityOrder[ca.priority] ?? 99;
280
+ const prioB = priorityOrder[cb.priority] ?? 99;
281
+ if (prioA !== prioB) {
282
+ return prioA - prioB;
283
+ }
284
+ return a.symbol.fullyQualifiedName.localeCompare(b.symbol.fullyQualifiedName);
285
+ }
286
+ /**
287
+ * @public
288
+ * Render module documentation to markdown
289
+ */
290
+ function renderModuleDoc(doc, filePath, adrLinker) {
291
+ const lines = [];
292
+ lines.push(`# Modul: ${filePath}`);
293
+ lines.push('');
294
+ // Add relevant ADRs section if adrLinker is provided
295
+ if (adrLinker) {
296
+ try {
297
+ const relevantAdrs = adrLinker.getRelevantAdrs(filePath);
298
+ if (relevantAdrs.length > 0) {
299
+ lines.push('## Relevante ADRs');
300
+ lines.push('');
301
+ for (const adrNum of relevantAdrs) {
302
+ const metadata = adrLinker.getAdrMetadata(adrNum);
303
+ if (metadata) {
304
+ const linkPath = `../adr/${metadata.fileName}`;
305
+ lines.push(`- [ADR-${adrNum}: ${metadata.title}](${linkPath})`);
306
+ }
307
+ }
308
+ lines.push('');
309
+ }
310
+ else {
311
+ // Debug: Log when no ADRs found for a file
312
+ console.log(`[ADR-Linker] No relevant ADRs found for ${filePath}`);
313
+ }
314
+ }
315
+ catch (err) {
316
+ // If ADR linking fails, continue without it
317
+ // This ensures the documentation generation doesn't break
318
+ console.error(`[ADR-Linker] Error getting relevant ADRs for ${filePath}: ${err}`);
319
+ }
320
+ }
321
+ else {
322
+ // Debug: Log when adrLinker is not provided
323
+ console.log(`[ADR-Linker] No adrLinker provided for ${filePath}`);
324
+ }
325
+ // Hilfsindex: Wie viele Methoden gehören (per Namensschema) zu welcher Klasse?
326
+ const methodsPerClass = new Map();
327
+ for (const block of doc.blocks) {
328
+ if (block.symbol.kind === 'method') {
329
+ const parts = block.symbol.fullyQualifiedName.split('.');
330
+ if (parts.length > 1) {
331
+ const className = parts[0];
332
+ methodsPerClass.set(className, (methodsPerClass.get(className) ?? 0) + 1);
333
+ }
334
+ }
335
+ }
336
+ for (const block of doc.blocks) {
337
+ const classification = (0, symbol_classifier_1.classifySymbol)(block.symbol);
338
+ if (block.comment) {
339
+ lines.push(block.comment);
340
+ }
341
+ lines.push(`### ${block.symbol.kind}: ${block.symbol.fullyQualifiedName}`);
342
+ // Rolle / Sichtbarkeit zur Einordnung des Symbols
343
+ lines.push(`Rolle: ${classification.role} (Sichtbarkeit: ${classification.visibility}, Priorität: ${classification.priority})`);
344
+ // Kurze, einzeilige Signatur-Zusammenfassung
345
+ const inlineSignature = signature_formatter_1.SignatureFormatter.formatForDoc(block.symbol);
346
+ lines.push(`Signatur: \`${inlineSignature}\``);
347
+ // Vollständige Signatur im Codeblock
348
+ lines.push('```ts');
349
+ lines.push(inlineSignature);
350
+ lines.push('```');
351
+ // Zusätzliche, strukturierte API-Doku
352
+ if (block.symbol.kind === 'function' || block.symbol.kind === 'method') {
353
+ const params = [...block.symbol.signature.parameters].sort((a, b) => (a.name || '').localeCompare(b.name || ''));
354
+ if (params.length > 0) {
355
+ lines.push('');
356
+ lines.push('Parameter:');
357
+ lines.push('');
358
+ lines.push('| Name | Typ | Optional | Default |');
359
+ lines.push('|------|-----|----------|---------|');
360
+ for (const p of params) {
361
+ const type = p.type ?? '';
362
+ const optional = p.optional ? 'ja' : 'nein';
363
+ const hasDefault = p.hasDefault ? 'ja' : 'nein';
364
+ lines.push(`| \`${p.name}\` | \`${type}\` | ${optional} | ${hasDefault} |`);
365
+ }
366
+ }
367
+ if (block.symbol.signature.returnType) {
368
+ lines.push('');
369
+ lines.push(`Rückgabewert: \`${block.symbol.signature.returnType}\``);
370
+ }
371
+ lines.push('');
372
+ }
373
+ else if (block.symbol.kind === 'interface') {
374
+ const props = [...block.symbol.signature.parameters].sort((a, b) => (a.name || '').localeCompare(b.name || ''));
375
+ if (props.length > 0) {
376
+ lines.push('');
377
+ lines.push('Eigenschaften:');
378
+ lines.push('');
379
+ lines.push('| Name | Typ | Optional |');
380
+ lines.push('|------|-----|----------|');
381
+ for (const p of props) {
382
+ const type = p.type ?? '';
383
+ const optional = p.optional ? 'ja' : 'nein';
384
+ lines.push(`| \`${p.name}\` | \`${type}\` | ${optional} |`);
385
+ }
386
+ lines.push('');
387
+ }
388
+ }
389
+ else if (block.symbol.kind === 'class') {
390
+ const simpleName = block.symbol.fullyQualifiedName.split('.').pop() || block.symbol.fullyQualifiedName;
391
+ const methodCount = methodsPerClass.get(simpleName) ?? 0;
392
+ const hasOwnSignature = (block.symbol.signature.parameters && block.symbol.signature.parameters.length > 0) ||
393
+ !!block.symbol.signature.returnType;
394
+ if (methodCount > 0 && !hasOwnSignature) {
395
+ lines.push('');
396
+ lines.push(`Diese Klasse bündelt ${methodCount} Methoden. ` +
397
+ 'Die detaillierten Signaturen sind in den nachfolgenden `method:`-Abschnitten dokumentiert.');
398
+ lines.push('');
399
+ }
400
+ else {
401
+ lines.push('');
402
+ }
403
+ }
404
+ else if (block.symbol.kind === 'variable' && block.symbol.fullyQualifiedName.endsWith('SNAPSHOT_CONSTANTS')) {
405
+ // Spezielle, strukturierte Darstellung für SNAPSHOT_CONSTANTS
406
+ const snapshotKeys = [];
407
+ const signature = inlineSignature;
408
+ const objectBodyMatch = signature.match(/\{\s*([^}]*)\s*\}$/);
409
+ if (objectBodyMatch) {
410
+ const body = objectBodyMatch[1];
411
+ const keyRegex = /readonly\s+([A-Z_]+)\s*:/g;
412
+ let m;
413
+ while ((m = keyRegex.exec(body)) !== null) {
414
+ snapshotKeys.push(m[1]);
415
+ }
416
+ }
417
+ if (snapshotKeys.length > 0) {
418
+ snapshotKeys.sort();
419
+ lines.push('');
420
+ lines.push('Struktur:');
421
+ lines.push('');
422
+ for (const key of snapshotKeys) {
423
+ lines.push(`- \`${key}\`: Konfigurationsbereich innerhalb von \`SNAPSHOT_CONSTANTS\`.`);
424
+ }
425
+ lines.push('');
426
+ }
427
+ else {
428
+ lines.push('');
429
+ }
430
+ }
431
+ else {
432
+ lines.push('');
433
+ }
434
+ }
435
+ return lines.join('\n');
436
+ }
437
+ exports.renderModuleDoc = renderModuleDoc;
438
+ //# sourceMappingURL=module-doc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"module-doc.js","sourceRoot":"","sources":["../../src/generator/module-doc.ts"],"names":[],"mappings":"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"}