doc-freshness-checker 2.0.23 → 2.1.0

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 (96) hide show
  1. package/README.md +5 -0
  2. package/dist/index.d.ts +6 -1
  3. package/dist/index.js +5 -0
  4. package/dist/index.js.map +1 -1
  5. package/dist/manifests/manifestInventory.d.ts +28 -0
  6. package/dist/manifests/manifestInventory.js +225 -0
  7. package/dist/manifests/manifestInventory.js.map +1 -0
  8. package/dist/manifests/manifestInventory.test.d.ts +1 -0
  9. package/dist/manifests/manifestInventory.test.js +176 -0
  10. package/dist/manifests/manifestInventory.test.js.map +1 -0
  11. package/dist/manifests/validatorConstructors.test.d.ts +1 -0
  12. package/dist/manifests/validatorConstructors.test.js +17 -0
  13. package/dist/manifests/validatorConstructors.test.js.map +1 -0
  14. package/dist/parsers/documentParser.d.ts +2 -3
  15. package/dist/parsers/documentParser.js.map +1 -1
  16. package/dist/parsers/extractorInterface.test.d.ts +1 -0
  17. package/dist/parsers/extractorInterface.test.js +34 -0
  18. package/dist/parsers/extractorInterface.test.js.map +1 -0
  19. package/dist/parsers/extractors/codeSnippetExtractor.js.map +1 -1
  20. package/dist/plugins/plugin.d.ts +5 -1
  21. package/dist/plugins/plugin.js +5 -1
  22. package/dist/plugins/plugin.js.map +1 -1
  23. package/dist/reporters/consoleReporter.d.ts +5 -11
  24. package/dist/reporters/consoleReporter.js +74 -76
  25. package/dist/reporters/consoleReporter.js.map +1 -1
  26. package/dist/reporters/consoleReporter.test.js +22 -27
  27. package/dist/reporters/consoleReporter.test.js.map +1 -1
  28. package/dist/reporters/enhancedReporter.d.ts +51 -7
  29. package/dist/reporters/enhancedReporter.js +128 -74
  30. package/dist/reporters/enhancedReporter.js.map +1 -1
  31. package/dist/reporters/enhancedReporter.test.js +110 -122
  32. package/dist/reporters/enhancedReporter.test.js.map +1 -1
  33. package/dist/reporters/jsonReporter.d.ts +6 -6
  34. package/dist/reporters/jsonReporter.js +24 -14
  35. package/dist/reporters/jsonReporter.js.map +1 -1
  36. package/dist/reporters/jsonReporter.test.js +26 -11
  37. package/dist/reporters/jsonReporter.test.js.map +1 -1
  38. package/dist/reporters/markdownIssueCells.d.ts +7 -0
  39. package/dist/reporters/markdownIssueCells.js +9 -0
  40. package/dist/reporters/markdownIssueCells.js.map +1 -0
  41. package/dist/reporters/markdownReporter.d.ts +2 -7
  42. package/dist/reporters/markdownReporter.js +57 -56
  43. package/dist/reporters/markdownReporter.js.map +1 -1
  44. package/dist/reporters/markdownReporter.test.js +104 -76
  45. package/dist/reporters/markdownReporter.test.js.map +1 -1
  46. package/dist/reporters/publicReporterApi.test.d.ts +1 -0
  47. package/dist/reporters/publicReporterApi.test.js +28 -0
  48. package/dist/reporters/publicReporterApi.test.js.map +1 -0
  49. package/dist/reporters/reportContext.d.ts +12 -0
  50. package/dist/reporters/reportContext.js +8 -0
  51. package/dist/reporters/reportContext.js.map +1 -0
  52. package/dist/reporters/reportContext.test.d.ts +1 -0
  53. package/dist/reporters/reportContext.test.js +30 -0
  54. package/dist/reporters/reportContext.test.js.map +1 -0
  55. package/dist/reporters/reporters.characterization.test.d.ts +1 -0
  56. package/dist/reporters/reporters.characterization.test.js +208 -0
  57. package/dist/reporters/reporters.characterization.test.js.map +1 -0
  58. package/dist/runner.js +67 -63
  59. package/dist/runner.js.map +1 -1
  60. package/dist/runner.test.js +444 -42
  61. package/dist/runner.test.js.map +1 -1
  62. package/dist/semantic/vectorSearch.js +2 -1
  63. package/dist/semantic/vectorSearch.js.map +1 -1
  64. package/dist/semantic/vectorSearch.test.js +2 -2
  65. package/dist/semantic/vectorSearch.test.js.map +1 -1
  66. package/dist/source/sourceIndex.d.ts +39 -0
  67. package/dist/source/sourceIndex.js +444 -0
  68. package/dist/source/sourceIndex.js.map +1 -0
  69. package/dist/source/sourceIndex.largeGlob.test.d.ts +1 -0
  70. package/dist/source/sourceIndex.largeGlob.test.js +29 -0
  71. package/dist/source/sourceIndex.largeGlob.test.js.map +1 -0
  72. package/dist/source/sourceIndex.test.d.ts +1 -0
  73. package/dist/source/sourceIndex.test.js +263 -0
  74. package/dist/source/sourceIndex.test.js.map +1 -0
  75. package/dist/source/sourceValidators.d.ts +7 -0
  76. package/dist/source/sourceValidators.js +8 -0
  77. package/dist/source/sourceValidators.js.map +1 -0
  78. package/dist/source/sourceValidators.test.d.ts +1 -0
  79. package/dist/source/sourceValidators.test.js +17 -0
  80. package/dist/source/sourceValidators.test.js.map +1 -0
  81. package/dist/types.d.ts +12 -2
  82. package/dist/validators/codePatternValidator.d.ts +5 -11
  83. package/dist/validators/codePatternValidator.js +17 -145
  84. package/dist/validators/codePatternValidator.js.map +1 -1
  85. package/dist/validators/codeSnippetValidator.d.ts +5 -18
  86. package/dist/validators/codeSnippetValidator.js +19 -312
  87. package/dist/validators/codeSnippetValidator.js.map +1 -1
  88. package/dist/validators/dependencyValidator.d.ts +0 -5
  89. package/dist/validators/dependencyValidator.js +7 -64
  90. package/dist/validators/dependencyValidator.js.map +1 -1
  91. package/dist/validators/versionValidator.d.ts +1 -10
  92. package/dist/validators/versionValidator.js +7 -157
  93. package/dist/validators/versionValidator.js.map +1 -1
  94. package/dist/validators/versionValidator.test.js +1 -101
  95. package/dist/validators/versionValidator.test.js.map +1 -1
  96. package/package.json +3 -3
@@ -0,0 +1,263 @@
1
+ import fs from 'fs';
2
+ import os from 'os';
3
+ import path from 'path';
4
+ import { SourceIndex } from './sourceIndex.js';
5
+ import { createSourceValidators } from './sourceValidators.js';
6
+ async function withSources(files, run) {
7
+ const rootDir = await fs.promises.mkdtemp(path.join(os.tmpdir(), 'doc-freshness-source-index-'));
8
+ try {
9
+ for (const [relativePath, content] of Object.entries(files)) {
10
+ const absolutePath = path.join(rootDir, relativePath);
11
+ await fs.promises.mkdir(path.dirname(absolutePath), { recursive: true });
12
+ await fs.promises.writeFile(absolutePath, content, 'utf-8');
13
+ }
14
+ await run(rootDir);
15
+ }
16
+ finally {
17
+ await fs.promises.rm(rootDir, { recursive: true, force: true });
18
+ }
19
+ }
20
+ async function loadBoth(index, config) {
21
+ const [pattern, snippet] = await Promise.all([index.load(config, 'pattern'), index.load(config, 'snippet')]);
22
+ expect(snippet).toBe(pattern);
23
+ return pattern;
24
+ }
25
+ describe('SourceIndex', () => {
26
+ it('preserves the distinct fallback languages used by pattern and snippet scans', async () => {
27
+ await withSources({
28
+ 'src/a.js': 'class JsClass {}',
29
+ 'src/a.jsx': 'class JsxClass {}',
30
+ 'src/a.mjs': 'class MjsClass {}',
31
+ 'src/a.cjs': 'class CjsClass {}',
32
+ 'src/a.ts': 'interface TsType {}',
33
+ 'src/a.tsx': 'interface TsxType {}',
34
+ 'src/a.py': 'class PythonClass:',
35
+ 'src/a.go': 'type GoType struct {}',
36
+ 'src/a.rs': 'struct RustType {}',
37
+ 'src/A.java': 'class JavaType {}',
38
+ }, async (rootDir) => {
39
+ const snapshot = await loadBoth(new SourceIndex(), { rootDir });
40
+ expect(Array.from(snapshot.patternFiles.values()).map((file) => file.language)).toEqual(expect.arrayContaining(['javascript', 'typescript', 'python', 'go', 'rust', 'java']));
41
+ expect(snapshot.patternFiles.size).toBe(10);
42
+ expect(snapshot.snippetFiles.size).toBe(6);
43
+ expect(snapshot.snippetFiles.has('src/a.mjs')).toBe(false);
44
+ expect(snapshot.snippetFiles.has('src/a.rs')).toBe(false);
45
+ });
46
+ });
47
+ it('labels explicitly configured unknown files as javascript in both views', async () => {
48
+ await withSources({ 'src/custom.weird': 'export function odd() {}' }, async (rootDir) => {
49
+ const snapshot = await loadBoth(new SourceIndex(), { rootDir, sourcePatterns: ['**/*.weird'] });
50
+ expect(snapshot.patternFiles.get('src/custom.weird')?.language).toBe('javascript');
51
+ expect(snapshot.snippetFiles.get('src/custom.weird')?.language).toBe('javascript');
52
+ expect(snapshot.symbols.get('odd')).toHaveLength(2);
53
+ expect(snapshot.functionSignatures.get('odd')).toHaveLength(1);
54
+ });
55
+ });
56
+ it("starts only the requested view and performs only that view's reads", async () => {
57
+ await withSources({ 'src/api.ts': 'class TypeScript {}', 'src/api.rs': 'struct Rust {}' }, async (rootDir) => {
58
+ const readFile = vi.spyOn(fs.promises, 'readFile');
59
+ try {
60
+ const pattern = await new SourceIndex().load({ rootDir }, 'pattern');
61
+ expect(pattern.patternFiles.size).toBe(2);
62
+ expect(pattern.snippetFiles.size).toBe(0);
63
+ expect(readFile).toHaveBeenCalledTimes(2);
64
+ readFile.mockClear();
65
+ const snippet = await new SourceIndex().load({ rootDir }, 'snippet');
66
+ expect(snippet.patternFiles.size).toBe(0);
67
+ expect(snippet.snippetFiles.has('src/api.ts')).toBe(true);
68
+ expect(snippet.snippetFiles.has('src/api.rs')).toBe(false);
69
+ expect(readFile).toHaveBeenCalledTimes(1);
70
+ }
71
+ finally {
72
+ readFile.mockRestore();
73
+ }
74
+ });
75
+ });
76
+ it('preserves view-specific ignores and does not consume general config excludes', async () => {
77
+ await withSources({
78
+ 'src/kept.ts': 'class Kept {}',
79
+ 'dist/generated.ts': 'class DistOnly {}',
80
+ 'build/generated.ts': 'class BuildOnly {}',
81
+ 'src/ignored-by-config.ts': 'class ConfigStillIncluded {}',
82
+ 'src/ignored.test.ts': 'class TestIgnored {}',
83
+ 'src/ignored.spec.ts': 'class SpecIgnored {}',
84
+ 'src/types.d.ts': 'class DeclarationIgnored {}',
85
+ 'node_modules/pkg/index.ts': 'class DependencyIgnored {}',
86
+ 'vendor/pkg.ts': 'class VendorIgnored {}',
87
+ }, async (rootDir) => {
88
+ const fallback = await loadBoth(new SourceIndex(), { rootDir });
89
+ expect(fallback.patternFiles.has('dist/generated.ts')).toBe(true);
90
+ expect(fallback.patternFiles.has('build/generated.ts')).toBe(true);
91
+ expect(fallback.snippetFiles.has('dist/generated.ts')).toBe(false);
92
+ expect(fallback.snippetFiles.has('build/generated.ts')).toBe(false);
93
+ const broad = await loadBoth(new SourceIndex(), {
94
+ rootDir,
95
+ sourcePatterns: ['**/*'],
96
+ exclude: ['src/ignored-by-config.ts'],
97
+ ignorePatterns: ['src/ignored-by-config.ts'],
98
+ });
99
+ expect(broad.patternFiles.has('src/ignored-by-config.ts')).toBe(true);
100
+ expect(broad.snippetFiles.has('src/ignored-by-config.ts')).toBe(true);
101
+ expect(broad.patternFiles.has('src/ignored.test.ts')).toBe(false);
102
+ expect(broad.patternFiles.has('src/ignored.spec.ts')).toBe(false);
103
+ expect(broad.patternFiles.has('src/types.d.ts')).toBe(false);
104
+ expect(broad.patternFiles.has('node_modules/pkg/index.ts')).toBe(false);
105
+ expect(broad.patternFiles.has('vendor/pkg.ts')).toBe(false);
106
+ });
107
+ });
108
+ it('swallows unreadable matches and invalid patterns without aborting later patterns', async () => {
109
+ await withSources({ 'src/good.ts': 'class Good {}' }, async (rootDir) => {
110
+ const snapshot = await loadBoth(new SourceIndex(), { rootDir, sourcePatterns: ['src', '[', 'src/*.ts'] });
111
+ expect(snapshot.symbols.has('Good')).toBe(true);
112
+ expect(snapshot.patternFiles.has('src')).toBe(false);
113
+ expect(snapshot.snippetFiles.has('src')).toBe(false);
114
+ });
115
+ });
116
+ it('indexes every configured occurrence in order but reads each absolute file once', async () => {
117
+ await withSources({
118
+ 'src/a.ts': 'export function Shared() {}',
119
+ 'src/b.ts': 'export function Shared() {}',
120
+ }, async (rootDir) => {
121
+ const readFile = vi.spyOn(fs.promises, 'readFile');
122
+ try {
123
+ const snapshot = await loadBoth(new SourceIndex(), {
124
+ rootDir,
125
+ sourcePatterns: ['src/b.ts', 'src/a.ts', 'src/b.ts'],
126
+ });
127
+ expect(snapshot.symbols.get('Shared')?.map(({ filePath }) => filePath)).toEqual([
128
+ 'src/b.ts',
129
+ 'src/b.ts',
130
+ 'src/a.ts',
131
+ 'src/a.ts',
132
+ 'src/b.ts',
133
+ 'src/b.ts',
134
+ ]);
135
+ expect(snapshot.functionSignatures.get('Shared')?.map(({ filePath }) => filePath)).toEqual(['src/b.ts', 'src/a.ts', 'src/b.ts']);
136
+ expect(readFile).toHaveBeenCalledTimes(2);
137
+ }
138
+ finally {
139
+ readFile.mockRestore();
140
+ }
141
+ });
142
+ });
143
+ it('preserves signature, key, and export extraction quirks', async () => {
144
+ await withSources({
145
+ 'src/api.ts': [
146
+ 'export function calculate(required: Map<string, number>, optional?: string, ...rest: unknown[]) {}',
147
+ 'export const arrow = (first: string, second = "x") => first;',
148
+ 'export interface Config {',
149
+ ' readonly first?: string;',
150
+ ' nested: {',
151
+ ' ignored: string;',
152
+ ' };',
153
+ '}',
154
+ 'export type Config = { second: number };',
155
+ 'const Internal = 1;',
156
+ 'export { Internal as Public };',
157
+ 'export default function Named() {}',
158
+ 'module.exports = { common, alias: value };',
159
+ ].join('\n'),
160
+ 'src/api.py': [
161
+ 'def method(self, required, optional=1, *args): pass',
162
+ 'def public_fn(): pass',
163
+ 'def _private(): pass',
164
+ 'Public = 1',
165
+ ].join('\n'),
166
+ }, async (rootDir) => {
167
+ const snapshot = await loadBoth(new SourceIndex(), { rootDir, sourcePatterns: ['src/*'] });
168
+ expect(snapshot.symbols.get('calculate')).toHaveLength(2);
169
+ expect(snapshot.functionSignatures.get('calculate')).toEqual([
170
+ { params: ['required', 'optional', 'rest'], requiredParams: 1, filePath: 'src/api.ts' },
171
+ ]);
172
+ expect(snapshot.functionSignatures.get('arrow')).toEqual([
173
+ { params: ['first', 'second'], requiredParams: 1, filePath: 'src/api.ts' },
174
+ ]);
175
+ expect(snapshot.functionSignatures.get('method')).toEqual([
176
+ { params: ['required', 'optional', 'args'], requiredParams: 1, filePath: 'src/api.py' },
177
+ ]);
178
+ expect(snapshot.interfaceKeys.get('Config')).toEqual(new Set(['first', 'nested', 'second']));
179
+ expect(snapshot.exportsByFile.get('src/api.ts')).toEqual(new Set(['calculate', 'arrow', 'Config', 'Named', 'Internal', 'default', 'common', 'alias']));
180
+ expect(snapshot.exportsByFile.get('src/api.ts')?.has('Public')).toBe(false);
181
+ expect(snapshot.exportsByFile.get('src/api.py')).toEqual(new Set(['method', 'public_fn', 'Public']));
182
+ });
183
+ });
184
+ it('memoizes the in-flight load and lets the first config win', async () => {
185
+ await withSources({ 'a.ts': 'class FirstRoot {}' }, async (firstRoot) => {
186
+ await withSources({ 'b.ts': 'class SecondRoot {}' }, async (secondRoot) => {
187
+ const index = new SourceIndex();
188
+ const first = index.load({ rootDir: firstRoot, sourcePatterns: ['*.ts'] }, 'pattern');
189
+ const second = index.load({ rootDir: secondRoot, sourcePatterns: ['*.ts'] }, 'pattern');
190
+ expect(second).toBe(first);
191
+ const [firstSnapshot, secondSnapshot] = await Promise.all([first, second]);
192
+ expect(secondSnapshot).toBe(firstSnapshot);
193
+ expect(firstSnapshot.symbols.has('FirstRoot')).toBe(true);
194
+ expect(firstSnapshot.symbols.has('SecondRoot')).toBe(false);
195
+ const snippet = await index.load({ rootDir: secondRoot, sourcePatterns: ['*.ts'] }, 'snippet');
196
+ expect(snippet.snippetFiles.has('a.ts')).toBe(true);
197
+ expect(snippet.snippetFiles.has('b.ts')).toBe(false);
198
+ });
199
+ });
200
+ });
201
+ it('keeps successful empty loads sticky and recovers to empty maps after a rejected first load', async () => {
202
+ await withSources({ 'a.ts': 'class Later {}' }, async (rootDir) => {
203
+ const emptyIndex = new SourceIndex();
204
+ const empty = await emptyIndex.load({ rootDir, sourcePatterns: [] }, 'pattern');
205
+ expect(empty.symbols.size).toBe(0);
206
+ expect(await emptyIndex.load({ rootDir, sourcePatterns: ['*.ts'] }, 'pattern')).toBe(empty);
207
+ const rejectedIndex = new SourceIndex();
208
+ const error = new Error('bad config');
209
+ const badConfig = Object.defineProperty({ rootDir }, 'sourcePatterns', {
210
+ get: () => {
211
+ throw error;
212
+ },
213
+ });
214
+ const rejected = rejectedIndex.load(badConfig, 'pattern');
215
+ const concurrent = rejectedIndex.load({ rootDir, sourcePatterns: ['*.ts'] }, 'pattern');
216
+ expect(concurrent).toBe(rejected);
217
+ await expect(Promise.all([rejected, concurrent])).rejects.toBe(error);
218
+ const recovered = await rejectedIndex.load({ rootDir, sourcePatterns: ['*.ts'] }, 'pattern');
219
+ expect(recovered.patternFiles.size).toBe(0);
220
+ expect(recovered.symbols.size).toBe(0);
221
+ });
222
+ });
223
+ it('leaves validator getters initialized after each view rejects once', async () => {
224
+ await withSources({ 'src/api.ts': 'class Later {}' }, async (rootDir) => {
225
+ const error = new Error('bad config');
226
+ const badConfig = Object.defineProperty({ rootDir }, 'sourcePatterns', {
227
+ get: () => {
228
+ throw error;
229
+ },
230
+ });
231
+ const goodConfig = { rootDir, sourcePatterns: ['src/*.ts'] };
232
+ const index = new SourceIndex();
233
+ const { pattern, snippet } = createSourceValidators(index);
234
+ await expect(pattern.buildSourceIndex(badConfig)).rejects.toBe(error);
235
+ expect(pattern.getSourceIndex()).toEqual(new Map());
236
+ expect(pattern.getSourceFiles()).toEqual(new Map());
237
+ await expect(pattern.buildSourceIndex(goodConfig)).resolves.toBeUndefined();
238
+ await expect(snippet.validateBatch([], {}, badConfig)).rejects.toBe(error);
239
+ expect(snippet.getFunctionSignatures()).toEqual(new Map());
240
+ expect(snippet.getInterfaceKeys()).toEqual(new Map());
241
+ await expect(snippet.validateBatch([], {}, goodConfig)).resolves.toEqual([]);
242
+ });
243
+ });
244
+ it('keeps validator state null until build and then shares stable snapshot maps', async () => {
245
+ await withSources({ 'src/api.ts': 'export function real() {}\ninterface Config { key: string }' }, async (rootDir) => {
246
+ const index = new SourceIndex();
247
+ const { pattern, snippet } = createSourceValidators(index);
248
+ expect(pattern.getSourceIndex()).toBeNull();
249
+ expect(pattern.getSourceFiles()).toBeNull();
250
+ expect(snippet.getFunctionSignatures()).toBeNull();
251
+ expect(snippet.getInterfaceKeys()).toBeNull();
252
+ const config = { rootDir, sourcePatterns: ['src/*.ts'] };
253
+ await pattern.buildSourceIndex(config);
254
+ await snippet.validateBatch([], {}, config);
255
+ const snapshot = await index.load(config, 'pattern');
256
+ expect(pattern.getSourceIndex()).toBe(snapshot.symbols);
257
+ expect(pattern.getSourceFiles()).toBe(snapshot.patternFiles);
258
+ expect(snippet.getFunctionSignatures()).toBe(snapshot.functionSignatures);
259
+ expect(snippet.getInterfaceKeys()).toBe(snapshot.interfaceKeys);
260
+ });
261
+ });
262
+ });
263
+ //# sourceMappingURL=sourceIndex.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sourceIndex.test.js","sourceRoot":"","sources":["../../src/source/sourceIndex.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { CodePatternValidator } from '../validators/codePatternValidator.js';
2
+ import { CodeSnippetValidator } from '../validators/codeSnippetValidator.js';
3
+ import { SourceIndex } from './sourceIndex.js';
4
+ export declare function createSourceValidators(index: SourceIndex): {
5
+ pattern: CodePatternValidator;
6
+ snippet: CodeSnippetValidator;
7
+ };
@@ -0,0 +1,8 @@
1
+ import { CodePatternValidator } from '../validators/codePatternValidator.js';
2
+ import { CodeSnippetValidator } from '../validators/codeSnippetValidator.js';
3
+ export function createSourceValidators(index) {
4
+ const PatternValidator = CodePatternValidator;
5
+ const SnippetValidator = CodeSnippetValidator;
6
+ return { pattern: new PatternValidator(index), snippet: new SnippetValidator(index) };
7
+ }
8
+ //# sourceMappingURL=sourceValidators.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sourceValidators.js","sourceRoot":"","sources":["../../src/source/sourceValidators.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAC;AAC7E,OAAO,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAC;AAK7E,MAAM,UAAU,sBAAsB,CAAC,KAAkB;IAIvD,MAAM,gBAAgB,GAAG,oBAAmF,CAAC;IAC7G,MAAM,gBAAgB,GAAG,oBAAmF,CAAC;IAC7G,OAAO,EAAE,OAAO,EAAE,IAAI,gBAAgB,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,IAAI,gBAAgB,CAAC,KAAK,CAAC,EAAE,CAAC;AACxF,CAAC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,17 @@
1
+ import { CodePatternValidator } from '../validators/codePatternValidator.js';
2
+ import { CodeSnippetValidator } from '../validators/codeSnippetValidator.js';
3
+ import { SourceIndex } from './sourceIndex.js';
4
+ describe('public validator constructors', () => {
5
+ it('accept only zero arguments in the public type surface', () => {
6
+ expectTypeOf(CodePatternValidator).toBeConstructibleWith();
7
+ expectTypeOf(CodeSnippetValidator).toBeConstructibleWith();
8
+ const internalInjectionIsRejected = () => {
9
+ // @ts-expect-error SourceIndex injection is internal-only.
10
+ new CodePatternValidator(new SourceIndex());
11
+ // @ts-expect-error SourceIndex injection is internal-only.
12
+ new CodeSnippetValidator(new SourceIndex());
13
+ };
14
+ expectTypeOf(internalInjectionIsRejected).toBeFunction();
15
+ });
16
+ });
17
+ //# sourceMappingURL=sourceValidators.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sourceValidators.test.js","sourceRoot":"","sources":["../../src/source/sourceValidators.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAC;AAC7E,OAAO,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAC;AAC7E,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,QAAQ,CAAC,+BAA+B,EAAE,GAAG,EAAE;IAC7C,EAAE,CAAC,uDAAuD,EAAE,GAAG,EAAE;QAC/D,YAAY,CAAC,oBAAoB,CAAC,CAAC,qBAAqB,EAAE,CAAC;QAC3D,YAAY,CAAC,oBAAoB,CAAC,CAAC,qBAAqB,EAAE,CAAC;QAE3D,MAAM,2BAA2B,GAAG,GAAS,EAAE;YAC7C,2DAA2D;YAC3D,IAAI,oBAAoB,CAAC,IAAI,WAAW,EAAE,CAAC,CAAC;YAC5C,2DAA2D;YAC3D,IAAI,oBAAoB,CAAC,IAAI,WAAW,EAAE,CAAC,CAAC;QAC9C,CAAC,CAAC;QACF,YAAY,CAAC,2BAA2B,CAAC,CAAC,YAAY,EAAE,CAAC;IAC3D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
package/dist/types.d.ts CHANGED
@@ -111,7 +111,7 @@ export interface DocFreshnessConfig {
111
111
  outputDir?: string;
112
112
  outputPath?: string;
113
113
  ignorePatterns?: string[];
114
- customExtractors?: BaseExtractor[];
114
+ customExtractors?: Extractor[];
115
115
  customValidators?: Record<string, BaseValidator>;
116
116
  graph?: GraphConfig;
117
117
  git?: GitConfig;
@@ -196,6 +196,10 @@ export interface LanguagePattern {
196
196
  regex: RegExp;
197
197
  kind: string;
198
198
  }
199
+ export interface Extractor {
200
+ supportsFormat(format: DocumentFormat): boolean;
201
+ extract(document: Document): Reference[];
202
+ }
199
203
  export interface BaseExtractor {
200
204
  type: string;
201
205
  supportedFormats: DocumentFormat[];
@@ -228,6 +232,11 @@ export interface SourceFileData {
228
232
  content: string;
229
233
  language: string;
230
234
  }
235
+ export interface FunctionSignature {
236
+ params: string[];
237
+ requiredParams: number;
238
+ filePath: string;
239
+ }
231
240
  export interface CodeFile {
232
241
  path: string;
233
242
  content: string;
@@ -309,7 +318,8 @@ export interface IncrementalStats {
309
318
  skipped: number;
310
319
  percentSkipped: number;
311
320
  }
312
- export type ManifestParser = (filePath: string) => Promise<Map<string, string>>;
321
+ export type SupportedLanguage = 'javascript' | 'typescript' | 'python' | 'go' | 'rust' | 'java';
322
+ export type SupportedSnippetLanguage = Extract<SupportedLanguage, 'javascript' | 'typescript' | 'python' | 'go'>;
313
323
  export interface LanguageConfig {
314
324
  extensions: string[];
315
325
  patterns: LanguagePattern[];
@@ -1,22 +1,16 @@
1
- import type { DocFreshnessConfig, Document, LanguageConfig, Reference, SourceFileData, SymbolLocation, ValidationResult } from '../types.js';
2
- /**
3
- * Language-specific source file patterns and code symbol extractors
4
- */
5
- declare const languageConfigs: Record<string, LanguageConfig>;
1
+ import type { DocFreshnessConfig, Document, Reference, SourceFileData, SymbolLocation, ValidationResult } from '../types.js';
2
+ declare const languageConfigs: Record<import("../types.js").SupportedLanguage, import("../types.js").LanguageConfig>;
6
3
  /**
7
4
  * Validates code patterns exist in source files
8
5
  */
9
6
  export declare class CodePatternValidator {
7
+ private readonly index;
10
8
  private sourceIndex;
11
9
  private sourceFiles;
12
- private sourceInputs;
13
- private sourceInputsAvailable;
14
- private capturedInputs;
10
+ private incrementalInputs;
15
11
  constructor();
16
12
  buildSourceIndex(config: DocFreshnessConfig): Promise<void>;
17
- private detectSourcePatterns;
18
- private detectLanguage;
19
- private indexContent;
13
+ private useSnapshot;
20
14
  validateBatch(references: Reference[], _document: Document, config: DocFreshnessConfig): Promise<ValidationResult[]>;
21
15
  private findSimilarSymbol;
22
16
  /**
@@ -1,175 +1,47 @@
1
- import fs from 'fs';
2
- import path from 'path';
3
- import { glob } from 'glob';
4
1
  import { findSimilar } from '../utils/similarity.js';
5
- /**
6
- * Language-specific source file patterns and code symbol extractors
7
- */
8
- const languageConfigs = {
9
- javascript: {
10
- extensions: ['js', 'jsx', 'mjs', 'cjs'],
11
- patterns: [
12
- { regex: /\bclass\s+([A-Z][a-zA-Z0-9]+)/g, kind: 'class' },
13
- { regex: /\bexport\s+(?:async\s+)?function\s+([a-zA-Z][a-zA-Z0-9]+)/g, kind: 'function' },
14
- { regex: /\bexport\s+const\s+([A-Z][a-zA-Z0-9]+)/g, kind: 'const' },
15
- { regex: /\bfunction\s+([a-zA-Z][a-zA-Z0-9]+)/g, kind: 'function' },
16
- ],
17
- },
18
- typescript: {
19
- extensions: ['ts', 'tsx'],
20
- patterns: [
21
- { regex: /\bclass\s+([A-Z][a-zA-Z0-9]+)/g, kind: 'class' },
22
- { regex: /\binterface\s+([A-Z][a-zA-Z0-9]+)/g, kind: 'interface' },
23
- { regex: /\btype\s+([A-Z][a-zA-Z0-9]+)\s*=/g, kind: 'type' },
24
- { regex: /\bexport\s+(?:async\s+)?function\s+([a-zA-Z][a-zA-Z0-9]+)/g, kind: 'function' },
25
- { regex: /\bexport\s+const\s+([A-Z][a-zA-Z0-9]+)/g, kind: 'const' },
26
- { regex: /\bfunction\s+([a-zA-Z][a-zA-Z0-9]+)/g, kind: 'function' },
27
- ],
28
- },
29
- python: {
30
- extensions: ['py'],
31
- patterns: [
32
- { regex: /\bclass\s+([A-Z][a-zA-Z0-9]+)/g, kind: 'class' },
33
- { regex: /\bdef\s+([a-z_][a-zA-Z0-9_]*)/g, kind: 'function' },
34
- ],
35
- },
36
- go: {
37
- extensions: ['go'],
38
- patterns: [
39
- { regex: /\btype\s+([A-Z][a-zA-Z0-9]+)\s+struct/g, kind: 'struct' },
40
- { regex: /\btype\s+([A-Z][a-zA-Z0-9]+)\s+interface/g, kind: 'interface' },
41
- { regex: /\bfunc\s+(?:\([^)]+\)\s+)?([A-Z][a-zA-Z0-9]+)/g, kind: 'function' },
42
- ],
43
- },
44
- rust: {
45
- extensions: ['rs'],
46
- patterns: [
47
- { regex: /\bstruct\s+([A-Z][a-zA-Z0-9]+)/g, kind: 'struct' },
48
- { regex: /\benum\s+([A-Z][a-zA-Z0-9]+)/g, kind: 'enum' },
49
- { regex: /\btrait\s+([A-Z][a-zA-Z0-9]+)/g, kind: 'trait' },
50
- { regex: /\bpub\s+fn\s+([a-z_][a-zA-Z0-9_]*)/g, kind: 'function' },
51
- { regex: /\bfn\s+([a-z_][a-zA-Z0-9_]*)/g, kind: 'function' },
52
- ],
53
- },
54
- java: {
55
- extensions: ['java'],
56
- patterns: [
57
- { regex: /\bclass\s+([A-Z][a-zA-Z0-9]+)/g, kind: 'class' },
58
- { regex: /\binterface\s+([A-Z][a-zA-Z0-9]+)/g, kind: 'interface' },
59
- { regex: /\benum\s+([A-Z][a-zA-Z0-9]+)/g, kind: 'enum' },
60
- ],
61
- },
62
- };
2
+ import { SourceIndex, languageConfigs as sourceLanguageConfigs } from '../source/sourceIndex.js';
63
3
  import { isIllustrativeSymbol } from '../utils/illustrativePatterns.js';
64
4
  import { createIllustrativeSkippedResult, getRuleSeverity, severityForIllustrative } from '../utils/validation.js';
5
+ const languageConfigs = sourceLanguageConfigs;
65
6
  /**
66
7
  * Validates code patterns exist in source files
67
8
  */
68
9
  export class CodePatternValidator {
10
+ index;
69
11
  /** @internal */
70
12
  incrementalCaptureScope = 'project';
71
13
  /** @internal */
72
14
  incrementalInputsRequiredForGraph = true;
73
15
  sourceIndex;
74
16
  sourceFiles; // Stores file content for vector search
75
- sourceInputs;
76
- sourceInputsAvailable;
77
- capturedInputs;
78
- constructor() {
17
+ incrementalInputs;
18
+ constructor(index = new SourceIndex()) {
19
+ this.index = index;
79
20
  this.sourceIndex = null;
80
21
  this.sourceFiles = null;
81
- this.sourceInputs = null;
82
- this.sourceInputsAvailable = false;
83
- this.capturedInputs = null;
22
+ this.incrementalInputs = null;
84
23
  }
85
24
  async buildSourceIndex(config) {
86
25
  if (this.sourceIndex) {
87
26
  return;
88
27
  }
89
- this.sourceIndex = new Map();
90
- this.sourceFiles = new Map();
91
- this.sourceInputs = new Map();
92
- this.sourceInputsAvailable = true;
93
- // Use configured source patterns or detect automatically
94
- const sourcePatterns = config.sourcePatterns || this.detectSourcePatterns();
95
- for (const pattern of sourcePatterns) {
96
- try {
97
- const files = await glob(pattern, {
98
- cwd: config.rootDir,
99
- absolute: true,
100
- nodir: true,
101
- ignore: ['**/*.test.*', '**/*.spec.*', '**/*.d.ts', '**/node_modules/**', '**/vendor/**'],
102
- });
103
- for (const file of files) {
104
- const absolutePath = path.resolve(file);
105
- if (this.sourceInputs.has(absolutePath)) {
106
- continue;
107
- }
108
- try {
109
- const content = await fs.promises.readFile(absolutePath, 'utf-8');
110
- const relativePath = path.relative(config.rootDir || process.cwd(), absolutePath);
111
- const lang = this.detectLanguage(absolutePath);
112
- this.indexContent(content, relativePath, lang);
113
- // Store file content for vector search
114
- this.sourceFiles.set(relativePath, { content, language: lang });
115
- this.sourceInputs.set(absolutePath, content);
116
- }
117
- catch {
118
- // Skip unreadable files
119
- this.sourceInputsAvailable = false;
120
- }
121
- }
122
- }
123
- catch {
124
- // Skip invalid patterns
125
- this.sourceInputsAvailable = false;
126
- }
28
+ try {
29
+ this.useSnapshot(await this.index.load(config, 'pattern'));
127
30
  }
128
- this.capturedInputs = this.sourceInputsAvailable
129
- ? [...this.sourceInputs].map(([sourcePath, content]) => ({ path: sourcePath, content }))
130
- : null;
131
- }
132
- detectSourcePatterns() {
133
- // Auto-detect based on what files exist
134
- const patterns = [];
135
- for (const conf of Object.values(languageConfigs)) {
136
- for (const ext of conf.extensions) {
137
- patterns.push(`**/*.${ext}`);
138
- }
31
+ catch (error) {
32
+ this.useSnapshot(await this.index.load(config, 'pattern'));
33
+ throw error;
139
34
  }
140
- return patterns;
141
35
  }
142
- detectLanguage(filePath) {
143
- const ext = path.extname(filePath).slice(1).toLowerCase();
144
- for (const [lang, conf] of Object.entries(languageConfigs)) {
145
- if (conf.extensions.includes(ext)) {
146
- return lang;
147
- }
148
- }
149
- return 'javascript';
36
+ useSnapshot(snapshot) {
37
+ this.sourceIndex = snapshot.symbols;
38
+ this.sourceFiles = snapshot.patternFiles;
39
+ this.incrementalInputs = snapshot.patternInputs;
150
40
  }
151
41
  /** @internal */
152
42
  async getIncrementalInputs(_references, _document, config) {
153
43
  await this.buildSourceIndex(config);
154
- return this.capturedInputs;
155
- }
156
- indexContent(content, filePath, language) {
157
- const langConfig = languageConfigs[language];
158
- if (!langConfig) {
159
- return;
160
- }
161
- for (const { regex, kind } of langConfig.patterns) {
162
- let match;
163
- // Clone regex to avoid state issues
164
- const re = new RegExp(regex.source, regex.flags);
165
- while ((match = re.exec(content)) !== null) {
166
- const name = match[1];
167
- if (!this.sourceIndex.has(name)) {
168
- this.sourceIndex.set(name, []);
169
- }
170
- this.sourceIndex.get(name).push({ filePath, kind, language });
171
- }
172
- }
44
+ return this.incrementalInputs;
173
45
  }
174
46
  async validateBatch(references, _document, config) {
175
47
  await this.buildSourceIndex(config);
@@ -1 +1 @@
1
- {"version":3,"file":"codePatternValidator.js","sourceRoot":"","sources":["../../src/validators/codePatternValidator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"codePatternValidator.js","sourceRoot":"","sources":["../../src/validators/codePatternValidator.ts"],"names":[],"mappings":"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"}