@noyrax/documentation-system-plugin 1.0.4-beta.1

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 (200) hide show
  1. package/.vscodeignore +41 -0
  2. package/LICENSE +21 -0
  3. package/MCP_SERVER_SETUP.md +371 -0
  4. package/README.md +663 -0
  5. package/assets/icon.svg +27 -0
  6. package/docs/LINKEDIN_ANTWORT_SEQUENZDIAGRAMME.md +190 -0
  7. package/docs/SEQUENZDIAGRAMM_BEWEIS.md +469 -0
  8. package/docs/SEQUENZDIAGRAMM_VALIDATE_FLOW.md +282 -0
  9. package/docs/adr/001-signatur-abweichung-fix.md +54 -0
  10. package/docs/adr/002-file-specific-validation-1.0.1.md +45 -0
  11. package/docs/adr/003-documentation-generation-bugs.md +134 -0
  12. package/docs/adr/004-validator-signature-matching-fix.md +121 -0
  13. package/docs/adr/005-validator-generic-simplification-tightening.md +35 -0
  14. package/docs/adr/006-parser-variable-type-extraction.md +33 -0
  15. package/docs/adr/007-ts-parser-load-libs-for-accurate-types.md +31 -0
  16. package/docs/adr/008-dependencies-cache-phase1.md +133 -0
  17. package/docs/adr/009-consolidation-union-logic-phase1-2.md +147 -0
  18. package/docs/adr/010-extension-union-integration-phase1-3-and-phase2.md +179 -0
  19. package/docs/adr/011-module-doc-change-tracking-phase3.md +190 -0
  20. package/docs/adr/012-git-deletions-change-report-phase4.md +235 -0
  21. package/docs/adr/013-system-functionality-fixes.md +279 -0
  22. package/docs/adr/014-rules-migration-und-mcp-integration.md +113 -0
  23. package/docs/adr/015-global-agent-package.md +158 -0
  24. package/docs/adr/016-produktisierung-docguard.md +193 -0
  25. package/docs/adr/017-signature-matching-optional-fields.md +128 -0
  26. package/docs/adr/018-rebranding-docguard-to-noyrax.md +109 -0
  27. package/docs/adr/019-system-schwachstellen-analyse-und-fixes.md +204 -0
  28. package/docs/adr/020-api-doc-tiefe-und-signatureformatter.md +74 -0
  29. package/docs/adr/021-semantic-api-docs-and-symbol-classifier.md +125 -0
  30. package/docs/adr/022-semantic-class-and-constants-rendering.md +82 -0
  31. package/docs/adr/023-adr-verknuepfung-modul-doku.md +54 -0
  32. package/docs/adr/024-cursor-rules-mehrdimensionaler-raum.md +230 -0
  33. package/docs/adr/025-mcp-tools-scan-validate-cli-bridge.md +202 -0
  34. package/docs/adr/026-reality-driven-development-system.md +173 -0
  35. package/docs/adr/027-scanner-excludes-and-union-logic-fix.md +189 -0
  36. package/docs/adr/028-src-coverage-union-resync.md +124 -0
  37. package/docs/adr/029-parser-flow-kopplung-und-sync-drift-modi.md +102 -0
  38. package/docs/adr/030-dependency-import-symbol-names-preservation.md +123 -0
  39. package/docs/adr/031-generate-cli-vollstaendige-dokumentation.md +99 -0
  40. package/docs/adr/032-windows-optimized-verification-scripts.md +165 -0
  41. package/docs/adr/036-enhanced-dependency-metadata.md +190 -0
  42. package/docs/adr/TEMPLATE.md +76 -0
  43. package/docs/index/symbols.jsonl +31 -0
  44. package/docs/modules/action__action.yml.md +50 -0
  45. package/docs/modules/documentation.config.schema.json.md +37 -0
  46. package/docs/modules/mcp__package.json.md +130 -0
  47. package/docs/modules/mcp__src__resources__docs.ts.md +94 -0
  48. package/docs/modules/mcp__src__server.ts.md +15 -0
  49. package/docs/modules/mcp__src__tools__drift.ts.md +110 -0
  50. package/docs/modules/mcp__src__tools__impact.ts.md +127 -0
  51. package/docs/modules/mcp__src__tools__scan.ts.md +75 -0
  52. package/docs/modules/mcp__src__tools__validate.ts.md +116 -0
  53. package/docs/modules/mcp__src__tools__verify-adrs.ts.md +106 -0
  54. package/docs/modules/mcp__tsconfig.json.md +22 -0
  55. package/docs/modules/package.json.md +131 -0
  56. package/docs/modules/packages__doc-system-agent__examples__basic-project__package.json.md +43 -0
  57. package/docs/modules/packages__doc-system-agent__examples__basic-project__src__calculator.ts.md +81 -0
  58. package/docs/modules/packages__doc-system-agent__package.json.md +154 -0
  59. package/docs/modules/packages__doc-system-agent__src__cli__index.ts.md +8 -0
  60. package/docs/modules/packages__doc-system-agent__src__cli__init.ts.md +93 -0
  61. package/docs/modules/packages__doc-system-agent__src__cli__update.ts.md +113 -0
  62. package/docs/modules/packages__doc-system-agent__src__constants.ts.md +29 -0
  63. package/docs/modules/packages__doc-system-agent__src__index.ts.md +234 -0
  64. package/docs/modules/packages__doc-system-agent__src__mcp__resources__docs.ts.md +94 -0
  65. package/docs/modules/packages__doc-system-agent__src__mcp__server.ts.md +17 -0
  66. package/docs/modules/packages__doc-system-agent__src__mcp__tools__drift.ts.md +38 -0
  67. package/docs/modules/packages__doc-system-agent__src__mcp__tools__impact.ts.md +75 -0
  68. package/docs/modules/packages__doc-system-agent__src__mcp__tools__scan.ts.md +23 -0
  69. package/docs/modules/packages__doc-system-agent__src__mcp__tools__validate.ts.md +23 -0
  70. package/docs/modules/packages__doc-system-agent__src__mcp__tools__verify-adrs.ts.md +106 -0
  71. package/docs/modules/packages__doc-system-agent__src__mcp__types.ts.md +355 -0
  72. package/docs/modules/packages__doc-system-agent__tsconfig.json.md +22 -0
  73. package/docs/modules/scripts__verify-adrs.js.md +97 -0
  74. package/docs/modules/scripts__verify-architecture.js.md +93 -0
  75. package/docs/modules/scripts__verify-imports.js.md +114 -0
  76. package/docs/modules/src____tests____setup.ts.md +8 -0
  77. package/docs/modules/src____tests____signature-formatter.test.ts.md +16 -0
  78. package/docs/modules/src____tests____snapshot-doc-generation.test.ts.md +8 -0
  79. package/docs/modules/src____tests____symbol-classifier.test.ts.md +16 -0
  80. package/docs/modules/src__cache__ast-cache.ts.md +91 -0
  81. package/docs/modules/src__cache__dependencies-cache.ts.md +89 -0
  82. package/docs/modules/src__cache__output-cache.ts.md +91 -0
  83. package/docs/modules/src__cache__signature-cache.ts.md +76 -0
  84. package/docs/modules/src__cli__generate-cli.ts.md +130 -0
  85. package/docs/modules/src__cli__scan-cli.ts.md +99 -0
  86. package/docs/modules/src__cli__validate-cli.ts.md +144 -0
  87. package/docs/modules/src__core__async.ts.md +18 -0
  88. package/docs/modules/src__core__consolidation.ts.md +158 -0
  89. package/docs/modules/src__core__git.ts.md +35 -0
  90. package/docs/modules/src__core__language-detection.ts.md +31 -0
  91. package/docs/modules/src__core__scanner.ts.md +101 -0
  92. package/docs/modules/src__core__signature-formatter.ts.md +232 -0
  93. package/docs/modules/src__core__symbol-classifier.ts.md +178 -0
  94. package/docs/modules/src__core__symbols.ts.md +31 -0
  95. package/docs/modules/src__drift__index.ts.md +53 -0
  96. package/docs/modules/src__extension.ts.md +418 -0
  97. package/docs/modules/src__generator__adr-linker.ts.md +154 -0
  98. package/docs/modules/src__generator__change-report.ts.md +85 -0
  99. package/docs/modules/src__generator__dependency-graph.ts.md +63 -0
  100. package/docs/modules/src__generator__index.ts.md +40 -0
  101. package/docs/modules/src__generator__module-doc.ts.md +242 -0
  102. package/docs/modules/src__index__index.ts.md +141 -0
  103. package/docs/modules/src__logging__index.ts.md +87 -0
  104. package/docs/modules/src__parsers__dependencies.ts.md +69 -0
  105. package/docs/modules/src__parsers__json-yaml.ts.md +81 -0
  106. package/docs/modules/src__parsers__python.ts.md +73 -0
  107. package/docs/modules/src__parsers__ts-js.ts.md +48 -0
  108. package/docs/modules/src__parsers__types.ts.md +99 -0
  109. package/docs/modules/src__ui__commands-provider.ts.md +70 -0
  110. package/docs/modules/src__ui__status-bar.ts.md +79 -0
  111. package/docs/modules/src__validator__index.ts.md +211 -0
  112. package/docs/modules/src__validator__signature-matching.ts.md +209 -0
  113. package/docs/modules/src__validator__status.ts.md +72 -0
  114. package/docs/modules/test-mcp-resources.js.md +27 -0
  115. package/docs/modules/tsconfig.json.md +22 -0
  116. package/docs/system/CHANGE_REPORT.md +19 -0
  117. package/docs/system/DEPENDENCIES.md +430 -0
  118. package/docs/system/DEPENDENCY_GRAPH.md +368 -0
  119. package/docs/system/NAVIGATION_SPACE_ANALYSIS.md +244 -0
  120. package/docs/system/NPX_CACHE_FIX.md +85 -0
  121. package/docs/system/NPX_LOCAL_USAGE.md +66 -0
  122. package/docs/system/PLUGIN_ECOSYSTEM_STATUS.md +465 -0
  123. package/docs/system/PLUGIN_UPDATE_GUIDE.md +212 -0
  124. package/docs/system/RULES_UPDATE_GUIDE.md +182 -0
  125. package/docs/system/SYSTEM_ANALYSIS.md +947 -0
  126. package/documentation.config.schema.json +77 -0
  127. package/noyrax-5d-database-plugin-0.1.8.tgz +0 -0
  128. package/out/cache/ast-cache.js +69 -0
  129. package/out/cache/ast-cache.js.map +1 -0
  130. package/out/cache/dependencies-cache.js +73 -0
  131. package/out/cache/dependencies-cache.js.map +1 -0
  132. package/out/cache/output-cache.js +69 -0
  133. package/out/cache/output-cache.js.map +1 -0
  134. package/out/cache/signature-cache.js +60 -0
  135. package/out/cache/signature-cache.js.map +1 -0
  136. package/out/cli/generate-cli.js +330 -0
  137. package/out/cli/generate-cli.js.map +1 -0
  138. package/out/cli/scan-cli.js +151 -0
  139. package/out/cli/scan-cli.js.map +1 -0
  140. package/out/cli/validate-cli.js +258 -0
  141. package/out/cli/validate-cli.js.map +1 -0
  142. package/out/core/async.js +38 -0
  143. package/out/core/async.js.map +1 -0
  144. package/out/core/consolidation.js +230 -0
  145. package/out/core/consolidation.js.map +1 -0
  146. package/out/core/git.js +48 -0
  147. package/out/core/git.js.map +1 -0
  148. package/out/core/language-detection.js +29 -0
  149. package/out/core/language-detection.js.map +1 -0
  150. package/out/core/scanner.js +179 -0
  151. package/out/core/scanner.js.map +1 -0
  152. package/out/core/signature-formatter.js +162 -0
  153. package/out/core/signature-formatter.js.map +1 -0
  154. package/out/core/symbol-classifier.js +96 -0
  155. package/out/core/symbol-classifier.js.map +1 -0
  156. package/out/core/symbols.js +24 -0
  157. package/out/core/symbols.js.map +1 -0
  158. package/out/drift/index.js +28 -0
  159. package/out/drift/index.js.map +1 -0
  160. package/out/extension.js +984 -0
  161. package/out/extension.js.map +1 -0
  162. package/out/generator/adr-linker.js +216 -0
  163. package/out/generator/adr-linker.js.map +1 -0
  164. package/out/generator/change-report.js +124 -0
  165. package/out/generator/change-report.js.map +1 -0
  166. package/out/generator/dependency-graph.js +98 -0
  167. package/out/generator/dependency-graph.js.map +1 -0
  168. package/out/generator/index.js +117 -0
  169. package/out/generator/index.js.map +1 -0
  170. package/out/generator/module-doc.js +438 -0
  171. package/out/generator/module-doc.js.map +1 -0
  172. package/out/index/index.js +147 -0
  173. package/out/index/index.js.map +1 -0
  174. package/out/logging/index.js +24 -0
  175. package/out/logging/index.js.map +1 -0
  176. package/out/parsers/dependencies.js +126 -0
  177. package/out/parsers/dependencies.js.map +1 -0
  178. package/out/parsers/json-yaml.js +90 -0
  179. package/out/parsers/json-yaml.js.map +1 -0
  180. package/out/parsers/python.js +160 -0
  181. package/out/parsers/python.js.map +1 -0
  182. package/out/parsers/ts-js.js +397 -0
  183. package/out/parsers/ts-js.js.map +1 -0
  184. package/out/parsers/types.js +3 -0
  185. package/out/parsers/types.js.map +1 -0
  186. package/out/ui/commands-provider.js +91 -0
  187. package/out/ui/commands-provider.js.map +1 -0
  188. package/out/ui/status-bar.js +85 -0
  189. package/out/ui/status-bar.js.map +1 -0
  190. package/out/validator/index.js +185 -0
  191. package/out/validator/index.js.map +1 -0
  192. package/out/validator/signature-matching.js +261 -0
  193. package/out/validator/signature-matching.js.map +1 -0
  194. package/out/validator/status.js +38 -0
  195. package/out/validator/status.js.map +1 -0
  196. package/package.json +306 -0
  197. package/publish.ps1 +21 -0
  198. package/scripts/verify-adrs.js +312 -0
  199. package/scripts/verify-architecture.js +181 -0
  200. package/scripts/verify-imports.js +274 -0
@@ -0,0 +1,179 @@
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
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ exports.scanWorkspace = void 0;
30
+ const fs = __importStar(require("node:fs"));
31
+ const path = __importStar(require("node:path"));
32
+ const ignore_1 = __importDefault(require("ignore"));
33
+ const language_detection_1 = require("./language-detection");
34
+ const index_1 = require("../logging/index");
35
+ const DEFAULT_EXCLUDES = new Set([
36
+ 'node_modules',
37
+ '.git', '.svn', '.hg',
38
+ 'dist', 'out', 'build',
39
+ '__pycache__', '.mypy_cache', '.venv', '.cache',
40
+ 'docs',
41
+ 'coverage',
42
+ '.database-plugin',
43
+ '.database',
44
+ '.ai-agent-context',
45
+ '.vscode',
46
+ '.cursor',
47
+ 'demo',
48
+ 'website', // Website-Projekt (laut .gitignore)
49
+ ]);
50
+ // Hard-Exclude File Patterns (systemweit verbindlich)
51
+ // Diese Dateien werden NIE gescannt, unabhängig von .gitignore
52
+ const EXCLUDE_FILE_PATTERNS = [
53
+ /\.d\.ts$/,
54
+ /\.schema\.json$/,
55
+ /\.min\.js$/,
56
+ /\.map$/, // Source Maps
57
+ ];
58
+ const BACKUP_DIR_NAMES = new Set(['backup', 'backups', 'archive', 'archives']);
59
+ const BACKUP_FILE_SUFFIXES = ['.bak', '.old', '.tmp', '.swp', '.swo'];
60
+ /**
61
+ * @public
62
+ * Scan workspace for source files
63
+ */
64
+ function scanWorkspace(options, includeBackups = false) {
65
+ const root = path.resolve(options.workspaceRoot);
66
+ const results = [];
67
+ const logger = new index_1.Logger({ component: 'scanner' });
68
+ const ig = (0, ignore_1.default)();
69
+ const gitignorePath = path.join(root, '.gitignore');
70
+ if (fs.existsSync(gitignorePath)) {
71
+ try {
72
+ ig.add(fs.readFileSync(gitignorePath, 'utf8'));
73
+ }
74
+ catch (e) {
75
+ const errorMsg = e instanceof Error ? e.message : String(e);
76
+ logger.warn(`Konnte .gitignore nicht lesen: ${errorMsg}`);
77
+ }
78
+ }
79
+ function isBinaryFile(filePath) {
80
+ try {
81
+ const fd = fs.openSync(filePath, 'r');
82
+ const buffer = Buffer.allocUnsafe(512);
83
+ const bytes = fs.readSync(fd, buffer, 0, 512, 0);
84
+ fs.closeSync(fd);
85
+ for (let i = 0; i < bytes; i++) {
86
+ const charCode = buffer[i];
87
+ if (charCode === 0)
88
+ return true; // NUL byte
89
+ }
90
+ return false;
91
+ }
92
+ catch {
93
+ return false;
94
+ }
95
+ }
96
+ function detectLanguageByExtension(filePath) {
97
+ const ext = path.extname(filePath).toLowerCase();
98
+ switch (ext) {
99
+ case '.ts':
100
+ case '.tsx':
101
+ return 'ts';
102
+ case '.js':
103
+ case '.jsx':
104
+ return 'js';
105
+ case '.json':
106
+ return 'json';
107
+ case '.yaml':
108
+ case '.yml':
109
+ return 'yaml';
110
+ case '.py':
111
+ return 'python';
112
+ case '.md':
113
+ return 'markdown';
114
+ default:
115
+ return null;
116
+ }
117
+ }
118
+ function walk(currentDir) {
119
+ const entries = fs.readdirSync(currentDir, { withFileTypes: true });
120
+ // Deterministische Reihenfolge
121
+ entries.sort((a, b) => a.name.localeCompare(b.name));
122
+ for (const entry of entries) {
123
+ if (entry.name.startsWith('.git'))
124
+ continue;
125
+ if (DEFAULT_EXCLUDES.has(entry.name))
126
+ continue;
127
+ const fullPath = path.join(currentDir, entry.name);
128
+ const repoRel = path.relative(root, fullPath).split(path.sep).join('/');
129
+ // Generierte Dokumentation ausschließen (docs/ Verzeichnis)
130
+ if (repoRel.startsWith('docs/'))
131
+ continue;
132
+ if (ig.ignores(repoRel))
133
+ continue;
134
+ if (entry.isDirectory()) {
135
+ if (!includeBackups && BACKUP_DIR_NAMES.has(entry.name.toLowerCase()))
136
+ continue;
137
+ walk(fullPath);
138
+ }
139
+ else if (entry.isFile()) {
140
+ if (isBinaryFile(fullPath))
141
+ continue;
142
+ // Hard-Exclude File Patterns (systemweit verbindlich)
143
+ if (EXCLUDE_FILE_PATTERNS.some(pattern => pattern.test(entry.name))) {
144
+ continue;
145
+ }
146
+ let language = detectLanguageByExtension(fullPath);
147
+ if (!language) {
148
+ try {
149
+ const fd = fs.openSync(fullPath, 'r');
150
+ const buffer = Buffer.allocUnsafe(128);
151
+ const bytes = fs.readSync(fd, buffer, 0, 128, 0);
152
+ fs.closeSync(fd);
153
+ const firstLine = buffer.slice(0, bytes).toString('utf8').split(/\r?\n/)[0] || '';
154
+ language = (0, language_detection_1.guessLanguageByShebang)(firstLine);
155
+ }
156
+ catch (e) {
157
+ const errorMsg = e instanceof Error ? e.message : String(e);
158
+ logger.warn(`Shebang-Erkennung fehlgeschlagen für ${repoRel}: ${errorMsg}`);
159
+ }
160
+ }
161
+ // Backup- und temporäre Dateien überspringen (außer explizit gewünscht)
162
+ if (!includeBackups) {
163
+ const lower = entry.name.toLowerCase();
164
+ if (BACKUP_FILE_SUFFIXES.some(s => lower.endsWith(s)))
165
+ continue;
166
+ if (repoRel.includes('/backups/') || repoRel.includes('/backup/') || repoRel.includes('/archives/'))
167
+ continue;
168
+ }
169
+ results.push({ absolutePath: fullPath, repositoryRelativePath: repoRel, language });
170
+ }
171
+ }
172
+ }
173
+ walk(root);
174
+ // Endgültig deterministisch sortieren
175
+ results.sort((a, b) => a.repositoryRelativePath.localeCompare(b.repositoryRelativePath));
176
+ return results;
177
+ }
178
+ exports.scanWorkspace = scanWorkspace;
179
+ //# sourceMappingURL=scanner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scanner.js","sourceRoot":"","sources":["../../src/core/scanner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,162 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SignatureFormatter = void 0;
4
+ /**
5
+ * @public
6
+ * Zentrale Klasse für konsistente Signatur-Formatierung
7
+ *
8
+ * Diese Klasse stellt sicher, dass Generator und Validator identische
9
+ * Signatur-Darstellungen verwenden. Basierend auf ADR-004 und der
10
+ * Analyse aus agent-pre.plan.md (Abschnitt 2.6).
11
+ */
12
+ class SignatureFormatter {
13
+ /**
14
+ * Formatiert ein Symbol für die Dokumentation
15
+ * Verwendet von: Generator (renderModuleDoc) und Validator (formatSignatureForDoc)
16
+ */
17
+ static formatForDoc(symbol) {
18
+ switch (symbol.kind) {
19
+ case 'interface':
20
+ return SignatureFormatter.formatInterface(symbol);
21
+ case 'class':
22
+ return `class ${symbol.signature.name}`;
23
+ case 'type':
24
+ return `type ${symbol.signature.name}`;
25
+ case 'enum':
26
+ return `enum ${symbol.signature.name}`;
27
+ case 'function':
28
+ case 'method':
29
+ return SignatureFormatter.formatFunctionOrMethod(symbol);
30
+ case 'variable':
31
+ return SignatureFormatter.formatVariable(symbol);
32
+ case 'module':
33
+ return `module ${symbol.signature.name}`;
34
+ default:
35
+ return symbol.signature.name;
36
+ }
37
+ }
38
+ /**
39
+ * Formatiert ein Interface mit allen Properties
40
+ */
41
+ static formatInterface(symbol) {
42
+ if (symbol.signature.parameters.length > 0) {
43
+ const props = symbol.signature.parameters
44
+ .map(p => SignatureFormatter.formatInterfaceProperty(p))
45
+ .join('\n');
46
+ return 'interface ' + symbol.signature.name + ' {\n' + props + '\n}';
47
+ }
48
+ return 'interface ' + symbol.signature.name + ' {}';
49
+ }
50
+ /**
51
+ * Formatiert eine einzelne Interface-Property
52
+ */
53
+ static formatInterfaceProperty(p) {
54
+ const optionalMarker = p.optional ? '?' : '';
55
+ const typeAnnotation = p.type ? ': ' + p.type : '';
56
+ return ' ' + p.name + optionalMarker + typeAnnotation + ';';
57
+ }
58
+ /**
59
+ * Formatiert eine Funktion oder Methode mit Parametern und Rückgabetyp
60
+ */
61
+ static formatFunctionOrMethod(symbol) {
62
+ const params = symbol.signature.parameters
63
+ .map(p => SignatureFormatter.formatFunctionParameter(p))
64
+ .join(', ');
65
+ const ret = symbol.signature.returnType ? ': ' + symbol.signature.returnType : '';
66
+ return symbol.signature.name + '(' + params + ')' + ret;
67
+ }
68
+ /**
69
+ * Formatiert einen einzelnen Funktions-Parameter
70
+ */
71
+ static formatFunctionParameter(p) {
72
+ const optionalMarker = p.optional ? '?' : '';
73
+ const typeAnnotation = p.type ? ': ' + p.type : '';
74
+ const defaultMarker = p.hasDefault ? ' = …' : '';
75
+ return p.name + optionalMarker + typeAnnotation + defaultMarker;
76
+ }
77
+ /**
78
+ * Formatiert eine Variable mit Typ
79
+ */
80
+ static formatVariable(symbol) {
81
+ const varType = symbol.signature.returnType ? `: ${symbol.signature.returnType}` : '';
82
+ return `${symbol.signature.name}${varType}`;
83
+ }
84
+ /**
85
+ * Normalisiert eine Signatur für Vergleiche
86
+ * Entfernt Whitespace-Unterschiede und normalisiert Formatierung
87
+ */
88
+ static normalize(signature) {
89
+ // Using replace with /g flag (replaceAll requires ES2021+)
90
+ return signature
91
+ .replace(/\s+/g, ' ')
92
+ .replace(/\s*:\s*/g, ':')
93
+ .replace(/\s*;\s*/g, ';')
94
+ .replace(/\s*\{\s*/g, '{')
95
+ .replace(/\s*\}\s*/g, '}')
96
+ .replace(/\s*\|\s*/g, '|')
97
+ .replace(/\s*,\s*/g, ', ')
98
+ .trim();
99
+ }
100
+ /**
101
+ * Normalisiert eine SymbolSignature zu einem String für Hashing/Vergleiche
102
+ */
103
+ static normalizeSignature(sig) {
104
+ const params = sig.parameters
105
+ .map(p => {
106
+ const optMarker = p.optional ? '?' : '';
107
+ const typeStr = p.type ?? '';
108
+ const defaultMarker = p.hasDefault ? '=…' : '';
109
+ return p.name + optMarker + ':' + typeStr + defaultMarker;
110
+ })
111
+ .sort((a, b) => a.localeCompare(b))
112
+ .join(',');
113
+ const retType = sig.returnType ?? '';
114
+ return sig.name + '(' + params + '):' + retType;
115
+ }
116
+ /**
117
+ * Vergleicht zwei Signaturen mit konfigurierbarer Toleranz
118
+ */
119
+ static compare(expected, documented, options = {}) {
120
+ const expectedNorm = SignatureFormatter.normalize(expected);
121
+ const documentedNorm = SignatureFormatter.normalize(documented);
122
+ // Exakter Match
123
+ if (expectedNorm === documentedNorm) {
124
+ return { match: true, reason: 'exact' };
125
+ }
126
+ // Optional-Feld-Toleranz
127
+ if (options.tolerateOptionalFields && SignatureFormatter.isOptionalFieldCompatible(expectedNorm, documentedNorm)) {
128
+ return { match: true, reason: 'optional-fields' };
129
+ }
130
+ // Generics-Vereinfachung
131
+ if (options.tolerateGenericSimplification && SignatureFormatter.isGenericTypeSimplification(expectedNorm, documentedNorm)) {
132
+ return { match: true, reason: 'generic-simplification' };
133
+ }
134
+ return { match: false, reason: 'mismatch' };
135
+ }
136
+ /**
137
+ * Prüft ob Signaturen nur durch optionale Felder unterschiedlich sind
138
+ */
139
+ static isOptionalFieldCompatible(expected, documented) {
140
+ // Using replace with /g flag (replaceAll requires ES2021+)
141
+ const removeOptionalMarkers = (s) => s.replace(/(\w+)\?:/g, '$1:');
142
+ return removeOptionalMarkers(expected) === removeOptionalMarkers(documented);
143
+ }
144
+ /**
145
+ * Prüft ob es sich um eine Generics-Vereinfachung handelt
146
+ */
147
+ static isGenericTypeSimplification(expected, documented) {
148
+ // Using replace with /g flag (replaceAll requires ES2021+)
149
+ const simplifyTypes = (sig) => {
150
+ return sig
151
+ .replace(/\b[A-Z]\b\[\]/g, '{}')
152
+ .replace(/\b[A-Z]\b(?!\[\])/g, '{}')
153
+ .replace(/Promise<[^>]+>/g, 'Promise<{}>')
154
+ .replace(/Thenable<[^>]+>/g, 'Thenable<{}>')
155
+ .replace(/Map<([^,>]+),\s*[^>]+>/g, 'Map<$1, {}>')
156
+ .replace(/Array<([^>]+)>/g, '$1[]');
157
+ };
158
+ return simplifyTypes(expected) === simplifyTypes(documented);
159
+ }
160
+ }
161
+ exports.SignatureFormatter = SignatureFormatter;
162
+ //# sourceMappingURL=signature-formatter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signature-formatter.js","sourceRoot":"","sources":["../../src/core/signature-formatter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,96 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.classifySymbol = void 0;
4
+ /**
5
+ * @public
6
+ * Zentrale, deterministische Klassifizierungs-API für Symbole.
7
+ *
8
+ * Arbeitet ausschließlich auf ParsedSymbol-Daten (kein I/O, keine
9
+ * Plugin-spezifischen Abhängigkeiten) und wird von Generator und
10
+ * Validator verwendet, um Doku-Tiefe und Prüfstrenge zu steuern.
11
+ */
12
+ function classifySymbol(symbol) {
13
+ const visibility = classifyVisibility(symbol);
14
+ const role = classifyRole(symbol);
15
+ const priority = classifyPriority(role, visibility);
16
+ return { visibility, role, priority };
17
+ }
18
+ exports.classifySymbol = classifySymbol;
19
+ function classifyVisibility(symbol) {
20
+ // Wenn der Parser explizite Sichtbarkeit liefert, respektieren
21
+ // wir diese. Fallback ist „public“, um sich konservativ zu verhalten.
22
+ const v = symbol.signature.visibility;
23
+ if (v === 'private' || v === 'protected') {
24
+ return 'internal';
25
+ }
26
+ return 'public';
27
+ }
28
+ function classifyRole(symbol) {
29
+ const kind = symbol.kind;
30
+ const name = symbol.signature.name;
31
+ const fqn = symbol.fullyQualifiedName;
32
+ const filePath = normalizePath(symbol.filePath);
33
+ // Service-APIs: Funktionen/Methoden/Klassen mit typischen Suffixen
34
+ if (kind === 'function' || kind === 'method' || kind === 'class') {
35
+ if (hasAnySuffix(name, ['Api', 'API', 'Service', 'Manager', 'Controller'])) {
36
+ return 'service-api';
37
+ }
38
+ if (filePathIncludes(filePath, ['api', 'service', 'services', 'controller'])) {
39
+ return 'service-api';
40
+ }
41
+ }
42
+ // Domain-Modelle: Interfaces/Klassen mit typischen Namensmustern
43
+ if (kind === 'interface' || kind === 'class' || kind === 'type') {
44
+ if (hasAnySuffix(name, ['Entity', 'Model', 'Record', 'Result', 'Request', 'Response', 'Stats'])) {
45
+ return 'domain-model';
46
+ }
47
+ if (filePathIncludes(filePath, ['models', 'entities', 'domain'])) {
48
+ return 'domain-model';
49
+ }
50
+ }
51
+ // Konfigurationen: Typen mit „Config“/„Options“ oder in *config*-Pfaden
52
+ if (kind === 'interface' || kind === 'type' || kind === 'variable') {
53
+ if (hasAnySuffix(name, ['Config', 'Options', 'Settings'])) {
54
+ return 'config';
55
+ }
56
+ if (filePathIncludes(filePath, ['config', 'configs'])) {
57
+ return 'config';
58
+ }
59
+ }
60
+ // Infrastruktur / technische Typen (Cache, Validator, Repository, Query, Migration, Snapshot etc.)
61
+ if (hasAnySubstring(name, ['Cache', 'Validator', 'Repository', 'Query', 'Migration', 'Snapshot']) ||
62
+ filePathIncludes(filePath, ['cache', 'validator', 'validators', 'repository', 'repositories', 'migrations'])) {
63
+ return 'infra';
64
+ }
65
+ return 'other';
66
+ }
67
+ function classifyPriority(role, visibility) {
68
+ if (visibility === 'public') {
69
+ if (role === 'service-api' || role === 'domain-model') {
70
+ return 'high';
71
+ }
72
+ if (role === 'config') {
73
+ return 'normal';
74
+ }
75
+ }
76
+ // Interne oder rein infrastrukturelle Symbole sind niedriger priorisiert
77
+ if (role === 'infra' || visibility === 'internal') {
78
+ return 'low';
79
+ }
80
+ return 'normal';
81
+ }
82
+ function normalizePath(p) {
83
+ return p.replace(/\\/g, '/').toLowerCase();
84
+ }
85
+ function hasAnySuffix(name, suffixes) {
86
+ return suffixes.some(s => name.endsWith(s));
87
+ }
88
+ function hasAnySubstring(name, parts) {
89
+ const lower = name.toLowerCase();
90
+ return parts.some(p => lower.includes(p.toLowerCase()));
91
+ }
92
+ function filePathIncludes(path, segments) {
93
+ const lower = path.toLowerCase();
94
+ return segments.some(seg => lower.includes(`/${seg.toLowerCase()}/`) || lower.endsWith(`/${seg.toLowerCase()}.ts`));
95
+ }
96
+ //# sourceMappingURL=symbol-classifier.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"symbol-classifier.js","sourceRoot":"","sources":["../../src/core/symbol-classifier.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.makeStableSymbolId = exports.computeSignatureHash = void 0;
4
+ const crypto_1 = require("crypto");
5
+ /**
6
+ * @public
7
+ * Compute hash for symbol signature
8
+ */
9
+ function computeSignatureHash(symbol) {
10
+ const base = [
11
+ symbol.signature.name,
12
+ symbol.signature.parameters.map(p => `${p.name}:${p.type ?? ''}:${p.hasDefault ? '1' : '0'}`).join('|'),
13
+ symbol.signature.returnType ?? '',
14
+ symbol.signature.visibility ?? 'public',
15
+ ].join('::');
16
+ return (0, crypto_1.createHash)('sha256').update(base).digest('hex').slice(0, 16);
17
+ }
18
+ exports.computeSignatureHash = computeSignatureHash;
19
+ function makeStableSymbolId(symbol) {
20
+ const hash = computeSignatureHash(symbol);
21
+ return `${symbol.language}://${symbol.filePath}#${symbol.fullyQualifiedName}(${hash})`;
22
+ }
23
+ exports.makeStableSymbolId = makeStableSymbolId;
24
+ //# sourceMappingURL=symbols.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"symbols.js","sourceRoot":"","sources":["../../src/core/symbols.ts"],"names":[],"mappings":";;;AAAA,mCAAoC;AAGpC;;;GAGG;AACH,SAAgB,oBAAoB,CAAC,MAAoB;IACrD,MAAM,IAAI,GAAG;QACT,MAAM,CAAC,SAAS,CAAC,IAAI;QACrB,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,IAAI,EAAE,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;QACvG,MAAM,CAAC,SAAS,CAAC,UAAU,IAAI,EAAE;QACjC,MAAM,CAAC,SAAS,CAAC,UAAU,IAAI,QAAQ;KAC1C,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACb,OAAO,IAAA,mBAAU,EAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AACxE,CAAC;AARD,oDAQC;AAED,SAAgB,kBAAkB,CAAC,MAAoB;IACnD,MAAM,IAAI,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAC1C,OAAO,GAAG,MAAM,CAAC,QAAQ,MAAM,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,kBAAkB,IAAI,IAAI,GAAG,CAAC;AAC3F,CAAC;AAHD,gDAGC"}
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.detectDrift = exports.computeCacheEntries = void 0;
4
+ const symbols_1 = require("../core/symbols");
5
+ function computeCacheEntries(symbols) {
6
+ return symbols.map(s => {
7
+ const id = (0, symbols_1.makeStableSymbolId)(s);
8
+ const baseId = id.replace(/\([^)]*\)$/, ''); // ohne hash
9
+ const signatureHash = (0, symbols_1.computeSignatureHash)(s);
10
+ return { baseId, signatureHash };
11
+ }).sort((a, b) => a.baseId.localeCompare(b.baseId));
12
+ }
13
+ exports.computeCacheEntries = computeCacheEntries;
14
+ function detectDrift(previous, current) {
15
+ if (!previous)
16
+ return { staleSymbols: [] };
17
+ const prevMap = new Map(previous.entries.map(e => [e.baseId, e.signatureHash]));
18
+ const stale = [];
19
+ for (const now of current) {
20
+ const before = prevMap.get(now.baseId);
21
+ if (before && before !== now.signatureHash) {
22
+ stale.push(now.baseId);
23
+ }
24
+ }
25
+ return { staleSymbols: stale };
26
+ }
27
+ exports.detectDrift = detectDrift;
28
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/drift/index.ts"],"names":[],"mappings":";;;AACA,6CAA2E;AAO3E,SAAgB,mBAAmB,CAAC,OAAuB;IACvD,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;QACnB,MAAM,EAAE,GAAG,IAAA,4BAAkB,EAAC,CAAC,CAAC,CAAC;QACjC,MAAM,MAAM,GAAG,EAAE,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY;QACzD,MAAM,aAAa,GAAG,IAAA,8BAAoB,EAAC,CAAC,CAAC,CAAC;QAC9C,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC;IACrC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AACxD,CAAC;AAPD,kDAOC;AAED,SAAgB,WAAW,CAAC,QAAmC,EAAE,OAAqB;IAClF,IAAI,CAAC,QAAQ;QAAE,OAAO,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC;IAC3C,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,aAAa,CAAU,CAAC,CAAC,CAAC;IACzF,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE;QACvB,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACvC,IAAI,MAAM,IAAI,MAAM,KAAK,GAAG,CAAC,aAAa,EAAE;YACxC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;SAC1B;KACJ;IACD,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC;AACnC,CAAC;AAXD,kCAWC"}