@monoes/monograph 1.5.7 → 1.5.8

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 (118) hide show
  1. package/README.md +9 -9
  2. package/dist/src/analysis/changed-files.d.ts +3 -0
  3. package/dist/src/analysis/changed-files.d.ts.map +1 -1
  4. package/dist/src/analysis/changed-files.js +11 -9
  5. package/dist/src/analysis/changed-files.js.map +1 -1
  6. package/dist/src/analysis/changed-workspaces.d.ts.map +1 -1
  7. package/dist/src/analysis/changed-workspaces.js +2 -9
  8. package/dist/src/analysis/changed-workspaces.js.map +1 -1
  9. package/dist/src/analysis/git-changed-files.d.ts +3 -0
  10. package/dist/src/analysis/git-changed-files.d.ts.map +1 -1
  11. package/dist/src/analysis/git-changed-files.js +17 -12
  12. package/dist/src/analysis/git-changed-files.js.map +1 -1
  13. package/dist/src/analysis/git-ref.d.ts +33 -0
  14. package/dist/src/analysis/git-ref.d.ts.map +1 -0
  15. package/dist/src/analysis/git-ref.js +54 -0
  16. package/dist/src/analysis/git-ref.js.map +1 -0
  17. package/dist/src/analyze/boundary-analysis.d.ts.map +1 -1
  18. package/dist/src/analyze/boundary-analysis.js +42 -42
  19. package/dist/src/analyze/boundary-analysis.js.map +1 -1
  20. package/dist/src/index.d.ts +1 -0
  21. package/dist/src/index.d.ts.map +1 -1
  22. package/dist/src/index.js +1 -0
  23. package/dist/src/index.js.map +1 -1
  24. package/dist/src/lsp/server.d.ts +1 -1
  25. package/dist/src/lsp/server.d.ts.map +1 -1
  26. package/dist/src/lsp/server.js +48 -13
  27. package/dist/src/lsp/server.js.map +1 -1
  28. package/dist/src/mcp-tools/api-impact.d.ts.map +1 -1
  29. package/dist/src/mcp-tools/api-impact.js +1 -16
  30. package/dist/src/mcp-tools/api-impact.js.map +1 -1
  31. package/dist/src/mcp-tools/context.d.ts.map +1 -1
  32. package/dist/src/mcp-tools/context.js +12 -23
  33. package/dist/src/mcp-tools/context.js.map +1 -1
  34. package/dist/src/mcp-tools/explain.d.ts.map +1 -1
  35. package/dist/src/mcp-tools/explain.js +15 -20
  36. package/dist/src/mcp-tools/explain.js.map +1 -1
  37. package/dist/src/mcp-tools/graph-query.d.ts.map +1 -1
  38. package/dist/src/mcp-tools/graph-query.js +10 -19
  39. package/dist/src/mcp-tools/graph-query.js.map +1 -1
  40. package/dist/src/mcp-tools/impact.d.ts.map +1 -1
  41. package/dist/src/mcp-tools/impact.js +38 -32
  42. package/dist/src/mcp-tools/impact.js.map +1 -1
  43. package/dist/src/mcp-tools/neighbors.d.ts.map +1 -1
  44. package/dist/src/mcp-tools/neighbors.js +4 -22
  45. package/dist/src/mcp-tools/neighbors.js.map +1 -1
  46. package/dist/src/mcp-tools/query.d.ts.map +1 -1
  47. package/dist/src/mcp-tools/query.js +14 -9
  48. package/dist/src/mcp-tools/query.js.map +1 -1
  49. package/dist/src/mcp-tools/rename.d.ts.map +1 -1
  50. package/dist/src/mcp-tools/rename.js +3 -20
  51. package/dist/src/mcp-tools/rename.js.map +1 -1
  52. package/dist/src/parsers/c.d.ts.map +1 -1
  53. package/dist/src/parsers/c.js +12 -0
  54. package/dist/src/parsers/c.js.map +1 -1
  55. package/dist/src/parsers/extractor.d.ts.map +1 -1
  56. package/dist/src/parsers/extractor.js +2 -1
  57. package/dist/src/parsers/extractor.js.map +1 -1
  58. package/dist/src/parsers/go.d.ts.map +1 -1
  59. package/dist/src/parsers/go.js +19 -1
  60. package/dist/src/parsers/go.js.map +1 -1
  61. package/dist/src/parsers/language-config.d.ts +4 -0
  62. package/dist/src/parsers/language-config.d.ts.map +1 -1
  63. package/dist/src/parsers/language-parsers.d.ts.map +1 -1
  64. package/dist/src/parsers/language-parsers.js +3 -1
  65. package/dist/src/parsers/language-parsers.js.map +1 -1
  66. package/dist/src/parsers/loader.d.ts +1 -0
  67. package/dist/src/parsers/loader.d.ts.map +1 -1
  68. package/dist/src/parsers/loader.js +161 -20
  69. package/dist/src/parsers/loader.js.map +1 -1
  70. package/dist/src/parsers/python.d.ts.map +1 -1
  71. package/dist/src/parsers/python.js +6 -0
  72. package/dist/src/parsers/python.js.map +1 -1
  73. package/dist/src/parsers/rust.d.ts.map +1 -1
  74. package/dist/src/parsers/rust.js +10 -0
  75. package/dist/src/parsers/rust.js.map +1 -1
  76. package/dist/src/pipeline/orchestrator.d.ts.map +1 -1
  77. package/dist/src/pipeline/orchestrator.js +17 -0
  78. package/dist/src/pipeline/orchestrator.js.map +1 -1
  79. package/dist/src/pipeline/phases/pdf-parse.d.ts.map +1 -1
  80. package/dist/src/pipeline/phases/pdf-parse.js +10 -11
  81. package/dist/src/pipeline/phases/pdf-parse.js.map +1 -1
  82. package/dist/src/storage/edge-store.d.ts +1 -0
  83. package/dist/src/storage/edge-store.d.ts.map +1 -1
  84. package/dist/src/storage/edge-store.js +5 -8
  85. package/dist/src/storage/edge-store.js.map +1 -1
  86. package/dist/src/storage/node-store.d.ts +1 -0
  87. package/dist/src/storage/node-store.d.ts.map +1 -1
  88. package/dist/src/storage/node-store.js +11 -12
  89. package/dist/src/storage/node-store.js.map +1 -1
  90. package/dist/src/storage/schema.d.ts.map +1 -1
  91. package/dist/src/storage/schema.js +6 -0
  92. package/dist/src/storage/schema.js.map +1 -1
  93. package/dist/src/storage/utils.d.ts +11 -0
  94. package/dist/src/storage/utils.d.ts.map +1 -0
  95. package/dist/src/storage/utils.js +24 -0
  96. package/dist/src/storage/utils.js.map +1 -0
  97. package/dist/tsconfig.tsbuildinfo +1 -1
  98. package/package.json +1 -1
  99. package/dist/src/fix/deps.d.ts +0 -14
  100. package/dist/src/fix/deps.d.ts.map +0 -1
  101. package/dist/src/fix/deps.js +0 -47
  102. package/dist/src/fix/deps.js.map +0 -1
  103. package/dist/src/fix/enum-members.d.ts +0 -20
  104. package/dist/src/fix/enum-members.d.ts.map +0 -1
  105. package/dist/src/fix/enum-members.js +0 -95
  106. package/dist/src/fix/enum-members.js.map +0 -1
  107. package/dist/src/fix/export-surgery.d.ts +0 -14
  108. package/dist/src/fix/export-surgery.d.ts.map +0 -1
  109. package/dist/src/fix/export-surgery.js +0 -140
  110. package/dist/src/fix/export-surgery.js.map +0 -1
  111. package/dist/src/fix/exports.d.ts +0 -16
  112. package/dist/src/fix/exports.d.ts.map +0 -1
  113. package/dist/src/fix/exports.js +0 -65
  114. package/dist/src/fix/exports.js.map +0 -1
  115. package/dist/src/fix/orchestrator.d.ts +0 -28
  116. package/dist/src/fix/orchestrator.d.ts.map +0 -1
  117. package/dist/src/fix/orchestrator.js +0 -39
  118. package/dist/src/fix/orchestrator.js.map +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@monoes/monograph",
3
- "version": "1.5.7",
3
+ "version": "1.5.8",
4
4
  "type": "module",
5
5
  "description": "Native TypeScript code intelligence engine for monomind",
6
6
  "main": "dist/src/index.js",
@@ -1,14 +0,0 @@
1
- export interface DepFix {
2
- packageJsonPath: string;
3
- packageName: string;
4
- section: 'dependencies' | 'devDependencies' | 'optionalDependencies' | 'peerDependencies';
5
- }
6
- export interface DepFixResult {
7
- packageJsonPath: string;
8
- removed: string[];
9
- dryRun: boolean;
10
- }
11
- export declare function fixUnusedDeps(fixes: DepFix[], options?: {
12
- dryRun?: boolean;
13
- }): DepFixResult[];
14
- //# sourceMappingURL=deps.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"deps.d.ts","sourceRoot":"","sources":["../../../src/fix/deps.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,MAAM;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,cAAc,GAAG,iBAAiB,GAAG,sBAAsB,GAAG,kBAAkB,CAAC;CAC3F;AAED,MAAM,WAAW,YAAY;IAC3B,eAAe,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,wBAAgB,aAAa,CAC3B,KAAK,EAAE,MAAM,EAAE,EACf,OAAO,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,GAC7B,YAAY,EAAE,CAkDhB"}
@@ -1,47 +0,0 @@
1
- import { readFileSync, writeFileSync, renameSync } from 'fs';
2
- import { tmpdir } from 'os';
3
- import { join } from 'path';
4
- export function fixUnusedDeps(fixes, options) {
5
- const dryRun = options?.dryRun ?? false;
6
- // Group fixes by packageJsonPath
7
- const byFile = new Map();
8
- for (const fix of fixes) {
9
- const existing = byFile.get(fix.packageJsonPath) ?? [];
10
- existing.push(fix);
11
- byFile.set(fix.packageJsonPath, existing);
12
- }
13
- const results = [];
14
- for (const [packageJsonPath, fileFixes] of byFile) {
15
- let raw;
16
- let pkg;
17
- try {
18
- raw = readFileSync(packageJsonPath, 'utf8');
19
- pkg = JSON.parse(raw);
20
- }
21
- catch {
22
- // Skip invalid or unreadable files
23
- continue;
24
- }
25
- const removed = [];
26
- for (const fix of fileFixes) {
27
- const section = pkg[fix.section];
28
- if (section && typeof section === 'object' && fix.packageName in section) {
29
- delete section[fix.packageName];
30
- removed.push(fix.packageName);
31
- }
32
- }
33
- if (!dryRun && removed.length > 0) {
34
- const newContent = JSON.stringify(pkg, null, 2) + '\n';
35
- const tmpFile = join(tmpdir(), `monograph-deps-${Date.now()}-${Math.random().toString(36).slice(2)}.tmp`);
36
- writeFileSync(tmpFile, newContent, 'utf8');
37
- renameSync(tmpFile, packageJsonPath);
38
- }
39
- results.push({
40
- packageJsonPath,
41
- removed,
42
- dryRun,
43
- });
44
- }
45
- return results;
46
- }
47
- //# sourceMappingURL=deps.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"deps.js","sourceRoot":"","sources":["../../../src/fix/deps.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAC7D,OAAO,EAAE,MAAM,EAAE,MAAM,IAAI,CAAC;AAC5B,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAc5B,MAAM,UAAU,aAAa,CAC3B,KAAe,EACf,OAA8B;IAE9B,MAAM,MAAM,GAAG,OAAO,EAAE,MAAM,IAAI,KAAK,CAAC;IAExC,iCAAiC;IACjC,MAAM,MAAM,GAAG,IAAI,GAAG,EAAoB,CAAC;IAC3C,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;QACxB,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC;QACvD,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACnB,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,eAAe,EAAE,QAAQ,CAAC,CAAC;IAC5C,CAAC;IAED,MAAM,OAAO,GAAmB,EAAE,CAAC;IAEnC,KAAK,MAAM,CAAC,eAAe,EAAE,SAAS,CAAC,IAAI,MAAM,EAAE,CAAC;QAClD,IAAI,GAAW,CAAC;QAChB,IAAI,GAA4B,CAAC;QAEjC,IAAI,CAAC;YACH,GAAG,GAAG,YAAY,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;YAC5C,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAA4B,CAAC;QACnD,CAAC;QAAC,MAAM,CAAC;YACP,mCAAmC;YACnC,SAAS;QACX,CAAC;QAED,MAAM,OAAO,GAAa,EAAE,CAAC;QAE7B,KAAK,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;YAC5B,MAAM,OAAO,GAAG,GAAG,CAAC,GAAG,CAAC,OAAO,CAAwC,CAAC;YACxE,IAAI,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,GAAG,CAAC,WAAW,IAAI,OAAO,EAAE,CAAC;gBACzE,OAAO,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;gBAChC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;YAChC,CAAC;QACH,CAAC;QAED,IAAI,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAClC,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC;YACvD,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,kBAAkB,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;YAC1G,aAAa,CAAC,OAAO,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;YAC3C,UAAU,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;QACvC,CAAC;QAED,OAAO,CAAC,IAAI,CAAC;YACX,eAAe;YACf,OAAO;YACP,MAAM;SACP,CAAC,CAAC;IACL,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -1,20 +0,0 @@
1
- export declare function declaresExportedEnum(line: string): {
2
- name: string;
3
- } | null;
4
- export declare function findEnumDeclarationRange(lines: string[], enumName: string): [number, number] | null;
5
- export declare function isEnumBodyEmpty(lines: string[], range: [number, number]): boolean;
6
- export declare function removeEnumMember(source: string, memberName: string, enumName: string): string;
7
- export interface EnumMemberFix {
8
- filePath: string;
9
- enumName: string;
10
- memberName: string;
11
- }
12
- export interface EnumMemberFixResult {
13
- fixed: EnumMemberFix[];
14
- errors: Array<{
15
- fix: EnumMemberFix;
16
- error: string;
17
- }>;
18
- }
19
- export declare function fixEnumMembers(fixes: EnumMemberFix[]): EnumMemberFixResult;
20
- //# sourceMappingURL=enum-members.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"enum-members.d.ts","sourceRoot":"","sources":["../../../src/fix/enum-members.ts"],"names":[],"mappings":"AAIA,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAQ1E;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAgBnG;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAGjF;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAsB7F;AAMD,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB,MAAM,EAAE,KAAK,CAAC;QAAE,GAAG,EAAE,aAAa,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACtD;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,aAAa,EAAE,GAAG,mBAAmB,CA0B1E"}
@@ -1,95 +0,0 @@
1
- import { readFileSync, writeFileSync, renameSync } from 'fs';
2
- const EXPORTED_ENUM_RE = /^\s*(export\s+)?(declare\s+)?(const\s+)?enum\s+(\w+)/;
3
- export function declaresExportedEnum(line) {
4
- const m = line.match(EXPORTED_ENUM_RE);
5
- if (!m)
6
- return null;
7
- const name = m[4];
8
- if (!name)
9
- return null;
10
- // must have "export" somewhere in the prefix parts
11
- if (!line.match(/\bexport\b/))
12
- return null;
13
- return { name };
14
- }
15
- export function findEnumDeclarationRange(lines, enumName) {
16
- for (let i = 0; i < lines.length; i++) {
17
- const d = declaresExportedEnum(lines[i]);
18
- if (d?.name !== enumName)
19
- continue;
20
- let depth = 0;
21
- for (let j = i; j < lines.length; j++) {
22
- for (const ch of lines[j]) {
23
- if (ch === '{')
24
- depth++;
25
- else if (ch === '}') {
26
- depth--;
27
- if (depth === 0)
28
- return [i, j];
29
- }
30
- }
31
- }
32
- }
33
- return null;
34
- }
35
- export function isEnumBodyEmpty(lines, range) {
36
- const body = lines.slice(range[0] + 1, range[1]).join('\n');
37
- return body.replace(/[,\s]/g, '').length === 0;
38
- }
39
- export function removeEnumMember(source, memberName, enumName) {
40
- const lines = source.split('\n');
41
- const range = findEnumDeclarationRange(lines, enumName);
42
- if (!range)
43
- return source;
44
- // Find the member line within the enum body
45
- const memberRe = new RegExp(`^\\s*${escapeRegex(memberName)}\\s*[,=]?`);
46
- let memberLine = -1;
47
- for (let i = range[0] + 1; i < range[1]; i++) {
48
- if (memberRe.test(lines[i])) {
49
- memberLine = i;
50
- break;
51
- }
52
- }
53
- if (memberLine === -1)
54
- return source;
55
- const newLines = lines.filter((_, idx) => idx !== memberLine);
56
- const newSource = newLines.join('\n');
57
- // Check if the enum body is now empty → remove the whole declaration
58
- const newRange = findEnumDeclarationRange(newLines, enumName);
59
- if (newRange && isEnumBodyEmpty(newLines, newRange)) {
60
- return newLines.filter((_, idx) => idx < newRange[0] || idx > newRange[1]).join('\n');
61
- }
62
- return newSource;
63
- }
64
- function escapeRegex(s) {
65
- return s.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
66
- }
67
- export function fixEnumMembers(fixes) {
68
- const result = { fixed: [], errors: [] };
69
- // Group by file, apply all member fixes to the same source
70
- const byFile = new Map();
71
- for (const fix of fixes) {
72
- const arr = byFile.get(fix.filePath) ?? [];
73
- arr.push(fix);
74
- byFile.set(fix.filePath, arr);
75
- }
76
- for (const [filePath, fileFixes] of byFile) {
77
- try {
78
- let source = readFileSync(filePath, 'utf8');
79
- for (const fix of fileFixes) {
80
- source = removeEnumMember(source, fix.memberName, fix.enumName);
81
- }
82
- const tmp = filePath + '.tmp';
83
- writeFileSync(tmp, source, 'utf8');
84
- renameSync(tmp, filePath);
85
- result.fixed.push(...fileFixes);
86
- }
87
- catch (err) {
88
- for (const fix of fileFixes) {
89
- result.errors.push({ fix, error: String(err) });
90
- }
91
- }
92
- }
93
- return result;
94
- }
95
- //# sourceMappingURL=enum-members.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"enum-members.js","sourceRoot":"","sources":["../../../src/fix/enum-members.ts"],"names":[],"mappings":"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"}
@@ -1,14 +0,0 @@
1
- export interface ExportSurgeryResult {
2
- modified: boolean;
3
- newContent: string;
4
- linesRemoved: number;
5
- }
6
- export declare function removeNameFromExportList(fileContent: string, exportName: string, line: number): ExportSurgeryResult;
7
- export declare function removeTypeFromExportList(fileContent: string, exportName: string, line: number): ExportSurgeryResult;
8
- export declare function promoteToTypeExport(fileContent: string, exportName: string, line: number): ExportSurgeryResult;
9
- export declare function applyExportSurgeries(fileContent: string, surgeries: Array<{
10
- exportName: string;
11
- line: number;
12
- action: 'remove' | 'remove-type' | 'promote-type';
13
- }>): ExportSurgeryResult;
14
- //# sourceMappingURL=export-surgery.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"export-surgery.d.ts","sourceRoot":"","sources":["../../../src/fix/export-surgery.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;CACtB;AAkGD,wBAAgB,wBAAwB,CACtC,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,GACX,mBAAmB,CAErB;AAED,wBAAgB,wBAAwB,CACtC,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,GACX,mBAAmB,CAErB;AAED,wBAAgB,mBAAmB,CACjC,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,GACX,mBAAmB,CA4CrB;AAED,wBAAgB,oBAAoB,CAClC,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,KAAK,CAAC;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,QAAQ,GAAG,aAAa,GAAG,cAAc,CAAA;CAAE,CAAC,GACxG,mBAAmB,CAyBrB"}
@@ -1,140 +0,0 @@
1
- const EXPORT_LIST_RE = /^(\s*)(export\s+)(type\s+)?\{([^}]*)\}(.*)$/;
2
- function findExportSpan(lines, startIdx) {
3
- let text = lines[startIdx];
4
- let endIdx = startIdx;
5
- if (!text.includes('{')) {
6
- return { startIdx, endIdx, fullText: text };
7
- }
8
- if (text.includes('}')) {
9
- return { startIdx, endIdx, fullText: text };
10
- }
11
- for (let i = startIdx + 1; i < lines.length; i++) {
12
- text += '\n' + lines[i];
13
- endIdx = i;
14
- if (lines[i].includes('}'))
15
- break;
16
- }
17
- return { startIdx, endIdx, fullText: text };
18
- }
19
- function removeSpecifierFromList(specifierList, exportName) {
20
- const specifiers = specifierList.split(',').map(s => s.trim()).filter(Boolean);
21
- const filtered = specifiers.filter(spec => {
22
- const baseName = spec.split(/\s+as\s+/)[0].trim();
23
- return baseName !== exportName;
24
- });
25
- if (filtered.length === specifiers.length)
26
- return null;
27
- return filtered.join(', ');
28
- }
29
- function applySurgery(fileContent, exportName, line, expectType) {
30
- const lines = fileContent.split('\n');
31
- const idx = line - 1;
32
- if (idx < 0 || idx >= lines.length) {
33
- return { modified: false, newContent: fileContent, linesRemoved: 0 };
34
- }
35
- const { startIdx, endIdx, fullText } = findExportSpan(lines, idx);
36
- const singleLineMatch = fullText.replace(/\n/g, ' ').match(EXPORT_LIST_RE);
37
- if (!singleLineMatch) {
38
- return { modified: false, newContent: fileContent, linesRemoved: 0 };
39
- }
40
- const indent = singleLineMatch[1];
41
- const exportKw = singleLineMatch[2];
42
- const typeKw = singleLineMatch[3] ?? '';
43
- const specifierList = singleLineMatch[4];
44
- const tail = singleLineMatch[5];
45
- if (expectType === true && !typeKw) {
46
- return { modified: false, newContent: fileContent, linesRemoved: 0 };
47
- }
48
- if (expectType === false && typeKw) {
49
- return { modified: false, newContent: fileContent, linesRemoved: 0 };
50
- }
51
- const newList = removeSpecifierFromList(specifierList, exportName);
52
- if (newList === null) {
53
- return { modified: false, newContent: fileContent, linesRemoved: 0 };
54
- }
55
- const spanSize = endIdx - startIdx + 1;
56
- const newLines = [...lines];
57
- if (newList.trim() === '') {
58
- newLines.splice(startIdx, spanSize);
59
- return {
60
- modified: true,
61
- newContent: newLines.join('\n'),
62
- linesRemoved: spanSize,
63
- };
64
- }
65
- const replacement = `${indent}${exportKw}${typeKw}{ ${newList} }${tail}`;
66
- newLines.splice(startIdx, spanSize, replacement);
67
- return {
68
- modified: true,
69
- newContent: newLines.join('\n'),
70
- linesRemoved: spanSize - 1,
71
- };
72
- }
73
- export function removeNameFromExportList(fileContent, exportName, line) {
74
- return applySurgery(fileContent, exportName, line, false);
75
- }
76
- export function removeTypeFromExportList(fileContent, exportName, line) {
77
- return applySurgery(fileContent, exportName, line, true);
78
- }
79
- export function promoteToTypeExport(fileContent, exportName, line) {
80
- const lines = fileContent.split('\n');
81
- const idx = line - 1;
82
- if (idx < 0 || idx >= lines.length) {
83
- return { modified: false, newContent: fileContent, linesRemoved: 0 };
84
- }
85
- const { startIdx, endIdx, fullText } = findExportSpan(lines, idx);
86
- const normalised = fullText.replace(/\n/g, ' ');
87
- const match = normalised.match(EXPORT_LIST_RE);
88
- if (!match || match[3]) {
89
- return { modified: false, newContent: fileContent, linesRemoved: 0 };
90
- }
91
- const indent = match[1];
92
- const specifierList = match[4];
93
- const tail = match[5];
94
- const specifiers = specifierList.split(',').map(s => s.trim()).filter(Boolean);
95
- const target = specifiers.find(spec => spec.split(/\s+as\s+/)[0].trim() === exportName);
96
- if (!target) {
97
- return { modified: false, newContent: fileContent, linesRemoved: 0 };
98
- }
99
- const remaining = specifiers.filter(spec => spec.split(/\s+as\s+/)[0].trim() !== exportName);
100
- const spanSize = endIdx - startIdx + 1;
101
- const newLines = [...lines];
102
- const typeExportLine = `${indent}export type { ${target} }`;
103
- if (remaining.length === 0) {
104
- newLines.splice(startIdx, spanSize, typeExportLine);
105
- }
106
- else {
107
- const valueExportLine = `${indent}export { ${remaining.join(', ')} }${tail}`;
108
- newLines.splice(startIdx, spanSize, valueExportLine, typeExportLine);
109
- }
110
- return {
111
- modified: true,
112
- newContent: newLines.join('\n'),
113
- linesRemoved: spanSize - newLines.length + lines.length,
114
- };
115
- }
116
- export function applyExportSurgeries(fileContent, surgeries) {
117
- const sorted = [...surgeries].sort((a, b) => b.line - a.line);
118
- let content = fileContent;
119
- let totalLinesRemoved = 0;
120
- let anyModified = false;
121
- for (const surgery of sorted) {
122
- let result;
123
- if (surgery.action === 'remove') {
124
- result = removeNameFromExportList(content, surgery.exportName, surgery.line);
125
- }
126
- else if (surgery.action === 'remove-type') {
127
- result = removeTypeFromExportList(content, surgery.exportName, surgery.line);
128
- }
129
- else {
130
- result = promoteToTypeExport(content, surgery.exportName, surgery.line);
131
- }
132
- if (result.modified) {
133
- content = result.newContent;
134
- totalLinesRemoved += result.linesRemoved;
135
- anyModified = true;
136
- }
137
- }
138
- return { modified: anyModified, newContent: content, linesRemoved: totalLinesRemoved };
139
- }
140
- //# sourceMappingURL=export-surgery.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"export-surgery.js","sourceRoot":"","sources":["../../../src/fix/export-surgery.ts"],"names":[],"mappings":"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"}
@@ -1,16 +0,0 @@
1
- export interface ExportFix {
2
- filePath: string;
3
- exportName: string;
4
- lineNumber: number;
5
- fixType: 'remove-export-keyword' | 'remove-entire-declaration';
6
- }
7
- export interface FixResult {
8
- filePath: string;
9
- fixesApplied: number;
10
- dryRun: boolean;
11
- diff: string[];
12
- }
13
- export declare function fixUnusedExports(fixes: ExportFix[], options?: {
14
- dryRun?: boolean;
15
- }): FixResult[];
16
- //# sourceMappingURL=exports.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"exports.d.ts","sourceRoot":"","sources":["../../../src/fix/exports.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,uBAAuB,GAAG,2BAA2B,CAAC;CAChE;AAED,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,OAAO,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAED,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,SAAS,EAAE,EAClB,OAAO,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,GAC7B,SAAS,EAAE,CAuEb"}
@@ -1,65 +0,0 @@
1
- import { readFileSync, writeFileSync, renameSync } from 'fs';
2
- import { tmpdir } from 'os';
3
- import { join } from 'path';
4
- export function fixUnusedExports(fixes, options) {
5
- const dryRun = options?.dryRun ?? false;
6
- // Group fixes by filePath
7
- const byFile = new Map();
8
- for (const fix of fixes) {
9
- const existing = byFile.get(fix.filePath) ?? [];
10
- existing.push(fix);
11
- byFile.set(fix.filePath, existing);
12
- }
13
- const results = [];
14
- for (const [filePath, fileFixes] of byFile) {
15
- let content;
16
- try {
17
- content = readFileSync(filePath, 'utf8');
18
- }
19
- catch {
20
- // Skip files we can't read
21
- continue;
22
- }
23
- const lines = content.split('\n');
24
- const diff = [];
25
- let fixesApplied = 0;
26
- // Sort by lineNumber descending to avoid line-shift bugs
27
- const sortedFixes = [...fileFixes].sort((a, b) => b.lineNumber - a.lineNumber);
28
- for (const fix of sortedFixes) {
29
- const idx = fix.lineNumber - 1;
30
- if (idx < 0 || idx >= lines.length)
31
- continue;
32
- const originalLine = lines[idx];
33
- if (fix.fixType === 'remove-export-keyword') {
34
- // Remove the 'export ' prefix from the line
35
- const newLine = originalLine.replace(/^(\s*)export (default function|function|const|class|type|interface|default )/, '$1$2');
36
- if (newLine !== originalLine) {
37
- diff.push(`- ${originalLine}`);
38
- diff.push(`+ ${newLine}`);
39
- lines[idx] = newLine;
40
- fixesApplied++;
41
- }
42
- }
43
- else if (fix.fixType === 'remove-entire-declaration') {
44
- diff.push(`- ${originalLine}`);
45
- lines.splice(idx, 1);
46
- fixesApplied++;
47
- }
48
- }
49
- if (!dryRun && fixesApplied > 0) {
50
- const newContent = lines.join('\n');
51
- // Atomic write: temp file then rename
52
- const tmpFile = join(tmpdir(), `monograph-fix-${Date.now()}-${Math.random().toString(36).slice(2)}.tmp`);
53
- writeFileSync(tmpFile, newContent, 'utf8');
54
- renameSync(tmpFile, filePath);
55
- }
56
- results.push({
57
- filePath,
58
- fixesApplied,
59
- dryRun,
60
- diff,
61
- });
62
- }
63
- return results;
64
- }
65
- //# sourceMappingURL=exports.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"exports.js","sourceRoot":"","sources":["../../../src/fix/exports.ts"],"names":[],"mappings":"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"}
@@ -1,28 +0,0 @@
1
- export interface FixerAnalysisResults {
2
- unusedExports: unknown[];
3
- unusedDependencies: unknown[];
4
- unusedEnumMembers: unknown[];
5
- }
6
- export interface FixOptions {
7
- root: string;
8
- output: 'human' | 'json';
9
- dryRun: boolean;
10
- yes: boolean;
11
- quiet: boolean;
12
- }
13
- export interface FixRecord {
14
- file: string;
15
- kind: string;
16
- name: string;
17
- applied: boolean;
18
- dryRun: boolean;
19
- }
20
- export type FixApplier = (root: string, results: FixerAnalysisResults, dryRun: boolean, out: FixRecord[]) => Promise<boolean>;
21
- export declare function runFix(results: FixerAnalysisResults, opts: FixOptions, appliers?: {
22
- exports?: FixApplier;
23
- deps?: FixApplier;
24
- enumMembers?: FixApplier;
25
- }): Promise<{
26
- exitCode: number;
27
- }>;
28
- //# sourceMappingURL=orchestrator.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../../../src/fix/orchestrator.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,oBAAoB;IACnC,aAAa,EAAE,OAAO,EAAE,CAAC;IACzB,kBAAkB,EAAE,OAAO,EAAE,CAAC;IAC9B,iBAAiB,EAAE,OAAO,EAAE,CAAC;CAC9B;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,GAAG,MAAM,CAAC;IACzB,MAAM,EAAE,OAAO,CAAC;IAChB,GAAG,EAAE,OAAO,CAAC;IACb,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,MAAM,UAAU,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,oBAAoB,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;AAE9H,wBAAsB,MAAM,CAC1B,OAAO,EAAE,oBAAoB,EAC7B,IAAI,EAAE,UAAU,EAChB,QAAQ,GAAE;IACR,OAAO,CAAC,EAAE,UAAU,CAAC;IACrB,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,WAAW,CAAC,EAAE,UAAU,CAAC;CACrB,GACL,OAAO,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,CAkC/B"}
@@ -1,39 +0,0 @@
1
- export async function runFix(results, opts, appliers = {}) {
2
- const isTTY = Boolean(process.stdin.isTTY);
3
- if (!opts.dryRun && !opts.yes && !isTTY) {
4
- const msg = 'fix requires --yes in non-interactive environments. Use --dry-run to preview first.';
5
- if (opts.output === 'json')
6
- console.log(JSON.stringify({ error: msg }));
7
- else
8
- console.error(`Error: ${msg}`);
9
- return { exitCode: 2 };
10
- }
11
- const total = results.unusedExports.length + results.unusedDependencies.length + results.unusedEnumMembers.length;
12
- if (total === 0) {
13
- if (opts.output === 'json')
14
- console.log(JSON.stringify({ dryRun: opts.dryRun, fixes: [], total_fixed: 0 }));
15
- else if (!opts.quiet)
16
- console.error('No issues to fix.');
17
- return { exitCode: 0 };
18
- }
19
- const fixes = [];
20
- let hadError = false;
21
- if (appliers.exports && results.unusedExports.length > 0)
22
- hadError ||= await appliers.exports(opts.root, results, opts.dryRun, fixes);
23
- if (appliers.deps && results.unusedDependencies.length > 0)
24
- hadError ||= await appliers.deps(opts.root, results, opts.dryRun, fixes);
25
- if (appliers.enumMembers && results.unusedEnumMembers.length > 0)
26
- hadError ||= await appliers.enumMembers(opts.root, results, opts.dryRun, fixes);
27
- if (opts.output === 'json') {
28
- const applied = fixes.filter(f => f.applied).length;
29
- console.log(JSON.stringify({ dryRun: opts.dryRun, fixes, total_fixed: applied }, null, 2));
30
- }
31
- else if (!opts.quiet) {
32
- if (opts.dryRun)
33
- console.error('Dry run complete. No files were modified.');
34
- else
35
- console.error(`Fixed ${fixes.filter(f => f.applied).length} issue(s).`);
36
- }
37
- return { exitCode: hadError ? 2 : 0 };
38
- }
39
- //# sourceMappingURL=orchestrator.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"orchestrator.js","sourceRoot":"","sources":["../../../src/fix/orchestrator.ts"],"names":[],"mappings":"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"}