doc-freshness-checker 2.0.23 → 2.2.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.
- package/README.md +19 -0
- package/dist/config/defaults.js +9 -3
- package/dist/config/defaults.js.map +1 -1
- package/dist/index.d.ts +6 -1
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -1
- package/dist/manifests/manifestInventory.d.ts +28 -0
- package/dist/manifests/manifestInventory.js +225 -0
- package/dist/manifests/manifestInventory.js.map +1 -0
- package/dist/manifests/manifestInventory.test.d.ts +1 -0
- package/dist/manifests/manifestInventory.test.js +176 -0
- package/dist/manifests/manifestInventory.test.js.map +1 -0
- package/dist/manifests/validatorConstructors.test.d.ts +1 -0
- package/dist/manifests/validatorConstructors.test.js +17 -0
- package/dist/manifests/validatorConstructors.test.js.map +1 -0
- package/dist/parsers/documentParser.d.ts +2 -3
- package/dist/parsers/documentParser.js.map +1 -1
- package/dist/parsers/extractorInterface.test.d.ts +1 -0
- package/dist/parsers/extractorInterface.test.js +34 -0
- package/dist/parsers/extractorInterface.test.js.map +1 -0
- package/dist/parsers/extractors/codeSnippetExtractor.js.map +1 -1
- package/dist/plugins/plugin.d.ts +5 -1
- package/dist/plugins/plugin.js +5 -1
- package/dist/plugins/plugin.js.map +1 -1
- package/dist/reporters/consoleReporter.d.ts +5 -11
- package/dist/reporters/consoleReporter.js +74 -76
- package/dist/reporters/consoleReporter.js.map +1 -1
- package/dist/reporters/consoleReporter.test.js +22 -27
- package/dist/reporters/consoleReporter.test.js.map +1 -1
- package/dist/reporters/enhancedReporter.d.ts +51 -7
- package/dist/reporters/enhancedReporter.js +128 -74
- package/dist/reporters/enhancedReporter.js.map +1 -1
- package/dist/reporters/enhancedReporter.test.js +110 -122
- package/dist/reporters/enhancedReporter.test.js.map +1 -1
- package/dist/reporters/jsonReporter.d.ts +6 -6
- package/dist/reporters/jsonReporter.js +24 -14
- package/dist/reporters/jsonReporter.js.map +1 -1
- package/dist/reporters/jsonReporter.test.js +26 -11
- package/dist/reporters/jsonReporter.test.js.map +1 -1
- package/dist/reporters/markdownIssueCells.d.ts +7 -0
- package/dist/reporters/markdownIssueCells.js +9 -0
- package/dist/reporters/markdownIssueCells.js.map +1 -0
- package/dist/reporters/markdownReporter.d.ts +2 -7
- package/dist/reporters/markdownReporter.js +57 -56
- package/dist/reporters/markdownReporter.js.map +1 -1
- package/dist/reporters/markdownReporter.test.js +104 -76
- package/dist/reporters/markdownReporter.test.js.map +1 -1
- package/dist/reporters/publicReporterApi.test.d.ts +1 -0
- package/dist/reporters/publicReporterApi.test.js +28 -0
- package/dist/reporters/publicReporterApi.test.js.map +1 -0
- package/dist/reporters/reportContext.d.ts +12 -0
- package/dist/reporters/reportContext.js +8 -0
- package/dist/reporters/reportContext.js.map +1 -0
- package/dist/reporters/reportContext.test.d.ts +1 -0
- package/dist/reporters/reportContext.test.js +30 -0
- package/dist/reporters/reportContext.test.js.map +1 -0
- package/dist/reporters/reporters.characterization.test.d.ts +1 -0
- package/dist/reporters/reporters.characterization.test.js +208 -0
- package/dist/reporters/reporters.characterization.test.js.map +1 -0
- package/dist/runner.js +67 -63
- package/dist/runner.js.map +1 -1
- package/dist/runner.test.js +444 -42
- package/dist/runner.test.js.map +1 -1
- package/dist/semantic/vectorSearch.js +2 -1
- package/dist/semantic/vectorSearch.js.map +1 -1
- package/dist/semantic/vectorSearch.test.js +2 -2
- package/dist/semantic/vectorSearch.test.js.map +1 -1
- package/dist/source/sourceIndex.d.ts +39 -0
- package/dist/source/sourceIndex.js +444 -0
- package/dist/source/sourceIndex.js.map +1 -0
- package/dist/source/sourceIndex.largeGlob.test.d.ts +1 -0
- package/dist/source/sourceIndex.largeGlob.test.js +29 -0
- package/dist/source/sourceIndex.largeGlob.test.js.map +1 -0
- package/dist/source/sourceIndex.test.d.ts +1 -0
- package/dist/source/sourceIndex.test.js +263 -0
- package/dist/source/sourceIndex.test.js.map +1 -0
- package/dist/source/sourceValidators.d.ts +7 -0
- package/dist/source/sourceValidators.js +8 -0
- package/dist/source/sourceValidators.js.map +1 -0
- package/dist/source/sourceValidators.test.d.ts +1 -0
- package/dist/source/sourceValidators.test.js +17 -0
- package/dist/source/sourceValidators.test.js.map +1 -0
- package/dist/types.d.ts +34 -2
- package/dist/validators/codePatternValidator.d.ts +5 -11
- package/dist/validators/codePatternValidator.js +17 -145
- package/dist/validators/codePatternValidator.js.map +1 -1
- package/dist/validators/codeSnippetValidator.d.ts +5 -18
- package/dist/validators/codeSnippetValidator.js +19 -312
- package/dist/validators/codeSnippetValidator.js.map +1 -1
- package/dist/validators/dependencyValidator.d.ts +0 -5
- package/dist/validators/dependencyValidator.js +7 -64
- package/dist/validators/dependencyValidator.js.map +1 -1
- package/dist/validators/versionValidator.d.ts +1 -10
- package/dist/validators/versionValidator.js +7 -157
- package/dist/validators/versionValidator.js.map +1 -1
- package/dist/validators/versionValidator.test.js +1 -101
- package/dist/validators/versionValidator.test.js.map +1 -1
- package/package.json +4 -4
|
@@ -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
|
@@ -38,6 +38,7 @@ export interface CodeSnippetRuleConfig extends RuleConfig {
|
|
|
38
38
|
skipIllustrative?: boolean;
|
|
39
39
|
}
|
|
40
40
|
export interface VersionRuleConfig extends RuleConfig {
|
|
41
|
+
/** @deprecated No validation effect; changes invalidate incremental reuse. Major versions are compared. Planned removal in v3.0.0. */
|
|
41
42
|
allowMinorDrift?: boolean;
|
|
42
43
|
}
|
|
43
44
|
export interface RulesConfig {
|
|
@@ -62,9 +63,16 @@ export interface GraphConfig {
|
|
|
62
63
|
cacheDir?: string;
|
|
63
64
|
cacheMaxAge?: number;
|
|
64
65
|
}
|
|
66
|
+
/**
|
|
67
|
+
* @deprecated Its fields have no Git effect; changes invalidate incremental reuse. Git is auto-detected,
|
|
68
|
+
* and Enhanced reports use a seven-day window. Planned removal in v3.0.0.
|
|
69
|
+
*/
|
|
65
70
|
export interface GitConfig {
|
|
71
|
+
/** @deprecated No Git effect; changes invalidate incremental reuse. Git is auto-detected. Planned removal in v3.0.0. */
|
|
66
72
|
enabled?: boolean;
|
|
73
|
+
/** @deprecated No Git effect; changes invalidate incremental reuse. Tracking is fixed. Planned removal in v3.0.0. */
|
|
67
74
|
trackChanges?: boolean;
|
|
75
|
+
/** @deprecated No Git effect; changes invalidate incremental reuse. Enhanced uses seven days. Planned removal in v3.0.0. */
|
|
68
76
|
changeWindow?: number;
|
|
69
77
|
}
|
|
70
78
|
export interface FreshnessScoringWeights {
|
|
@@ -87,7 +95,9 @@ export interface FreshnessScoringConfig {
|
|
|
87
95
|
export interface VectorSearchConfig {
|
|
88
96
|
enabled?: boolean;
|
|
89
97
|
similarityThreshold?: number;
|
|
98
|
+
/** @deprecated No indexing effect; changes invalidate incremental reuse. Comments are always indexed. Planned removal in v3.0.0. */
|
|
90
99
|
indexCodeComments?: boolean;
|
|
100
|
+
/** @deprecated No indexing effect; changes invalidate incremental reuse. No docstring path exists. Planned removal in v3.0.0. */
|
|
91
101
|
indexDocstrings?: boolean;
|
|
92
102
|
}
|
|
93
103
|
export interface CacheConfig {
|
|
@@ -108,12 +118,24 @@ export interface DocFreshnessConfig {
|
|
|
108
118
|
urlValidation?: UrlValidationConfig;
|
|
109
119
|
rules?: RulesConfig;
|
|
110
120
|
reporters?: ReporterType[];
|
|
121
|
+
/**
|
|
122
|
+
* @deprecated No report-routing effect; changes invalidate incremental reuse. Use outputPath for
|
|
123
|
+
* JSON, Markdown, or Enhanced. Console remains on stdout. Planned removal in v3.0.0.
|
|
124
|
+
*/
|
|
111
125
|
outputDir?: string;
|
|
112
126
|
outputPath?: string;
|
|
127
|
+
/**
|
|
128
|
+
* @deprecated No filtering effect; changes invalidate incremental reuse. Rule-level
|
|
129
|
+
* illustrativePatterns cover file-path, directory-structure, and code-snippet only. Planned removal in v3.0.0.
|
|
130
|
+
*/
|
|
113
131
|
ignorePatterns?: string[];
|
|
114
|
-
customExtractors?:
|
|
132
|
+
customExtractors?: Extractor[];
|
|
115
133
|
customValidators?: Record<string, BaseValidator>;
|
|
116
134
|
graph?: GraphConfig;
|
|
135
|
+
/**
|
|
136
|
+
* @deprecated No Git effect; changes invalidate incremental reuse. Git is auto-detected, and
|
|
137
|
+
* Enhanced reports use a seven-day window. Planned removal in v3.0.0.
|
|
138
|
+
*/
|
|
117
139
|
git?: GitConfig;
|
|
118
140
|
freshnessScoring?: FreshnessScoringConfig;
|
|
119
141
|
vectorSearch?: VectorSearchConfig;
|
|
@@ -196,6 +218,10 @@ export interface LanguagePattern {
|
|
|
196
218
|
regex: RegExp;
|
|
197
219
|
kind: string;
|
|
198
220
|
}
|
|
221
|
+
export interface Extractor {
|
|
222
|
+
supportsFormat(format: DocumentFormat): boolean;
|
|
223
|
+
extract(document: Document): Reference[];
|
|
224
|
+
}
|
|
199
225
|
export interface BaseExtractor {
|
|
200
226
|
type: string;
|
|
201
227
|
supportedFormats: DocumentFormat[];
|
|
@@ -228,6 +254,11 @@ export interface SourceFileData {
|
|
|
228
254
|
content: string;
|
|
229
255
|
language: string;
|
|
230
256
|
}
|
|
257
|
+
export interface FunctionSignature {
|
|
258
|
+
params: string[];
|
|
259
|
+
requiredParams: number;
|
|
260
|
+
filePath: string;
|
|
261
|
+
}
|
|
231
262
|
export interface CodeFile {
|
|
232
263
|
path: string;
|
|
233
264
|
content: string;
|
|
@@ -309,7 +340,8 @@ export interface IncrementalStats {
|
|
|
309
340
|
skipped: number;
|
|
310
341
|
percentSkipped: number;
|
|
311
342
|
}
|
|
312
|
-
export type
|
|
343
|
+
export type SupportedLanguage = 'javascript' | 'typescript' | 'python' | 'go' | 'rust' | 'java';
|
|
344
|
+
export type SupportedSnippetLanguage = Extract<SupportedLanguage, 'javascript' | 'typescript' | 'python' | 'go'>;
|
|
313
345
|
export interface LanguageConfig {
|
|
314
346
|
extensions: string[];
|
|
315
347
|
patterns: LanguagePattern[];
|
|
@@ -1,22 +1,16 @@
|
|
|
1
|
-
import type { DocFreshnessConfig, Document,
|
|
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
|
|
13
|
-
private sourceInputsAvailable;
|
|
14
|
-
private capturedInputs;
|
|
10
|
+
private incrementalInputs;
|
|
15
11
|
constructor();
|
|
16
12
|
buildSourceIndex(config: DocFreshnessConfig): Promise<void>;
|
|
17
|
-
private
|
|
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
|
/**
|