@codeledger/repo 0.2.1 → 0.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/dep-graph.d.ts.map +1 -1
- package/dist/dep-graph.js +178 -18
- package/dist/dep-graph.js.map +1 -1
- package/dist/hash.d.ts +5 -0
- package/dist/hash.d.ts.map +1 -0
- package/dist/hash.js +10 -0
- package/dist/hash.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/lang.d.ts +30 -0
- package/dist/lang.d.ts.map +1 -0
- package/dist/lang.js +147 -0
- package/dist/lang.js.map +1 -0
- package/dist/scanner.d.ts.map +1 -1
- package/dist/scanner.js +41 -15
- package/dist/scanner.js.map +1 -1
- package/dist/test-map.d.ts.map +1 -1
- package/dist/test-map.js +131 -12
- package/dist/test-map.js.map +1 -1
- package/dist/walk.d.ts.map +1 -1
- package/dist/walk.js +13 -12
- package/dist/walk.js.map +1 -1
- package/package.json +3 -3
package/dist/dep-graph.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dep-graph.d.ts","sourceRoot":"","sources":["../src/dep-graph.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"dep-graph.d.ts","sourceRoot":"","sources":["../src/dep-graph.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AA8B5D,wBAAgB,aAAa,CAC3B,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,QAAQ,EAAE,EACjB,YAAY,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GACjC,QAAQ,CAmCV"}
|
package/dist/dep-graph.js
CHANGED
|
@@ -1,14 +1,30 @@
|
|
|
1
1
|
import { readFileSync } from 'node:fs';
|
|
2
2
|
import { dirname, join } from 'node:path';
|
|
3
|
-
|
|
4
|
-
//
|
|
5
|
-
const
|
|
6
|
-
const
|
|
3
|
+
import { languageFamily, resolutionExtensions, indexFileNames } from './lang.js';
|
|
4
|
+
// ── JS/TS import regexes ────────────────────────────────────────────────────
|
|
5
|
+
const JS_IMPORT_RE = /(?:import|export)\s+(?:[\s\S]*?\s+from\s+)?['"]([^'"]+)['"]/g;
|
|
6
|
+
const JS_REQUIRE_RE = /require\s*\(\s*['"]([^'"]+)['"]\s*\)/g;
|
|
7
|
+
// ── Python import regexes ───────────────────────────────────────────────────
|
|
8
|
+
/** from foo.bar import baz (absolute) */
|
|
9
|
+
const PY_FROM_IMPORT_RE = /^from\s+([\w.]+)\s+import\b/gm;
|
|
10
|
+
/** import foo.bar */
|
|
11
|
+
const PY_IMPORT_RE = /^import\s+([\w.]+)/gm;
|
|
12
|
+
/** from . import foo, from ..utils import bar (relative) */
|
|
13
|
+
const PY_RELATIVE_IMPORT_RE = /^from\s+(\.+[\w.]*)\s+import\b/gm;
|
|
14
|
+
// ── Go import regexes ───────────────────────────────────────────────────────
|
|
15
|
+
/** Single-line: import "path/to/pkg" or import alias "path/to/pkg" */
|
|
16
|
+
const GO_SINGLE_IMPORT_RE = /import\s+(?:\w+\s+)?"([^"]+)"/g;
|
|
17
|
+
/** Multi-line: import ( ... ) */
|
|
18
|
+
const GO_IMPORT_BLOCK_RE = /import\s*\(([\s\S]*?)\)/g;
|
|
19
|
+
/** Lines within a multi-line block */
|
|
20
|
+
const GO_IMPORT_LINE_RE = /(?:\w+\s+)?"([^"]+)"/g;
|
|
21
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
7
22
|
export function buildDepGraph(root, files, contentCache) {
|
|
8
23
|
const imports = {};
|
|
9
24
|
const dependents = {};
|
|
10
|
-
// Build path lookup set for fast resolution
|
|
11
25
|
const fileSet = new Set(files.map((f) => f.path));
|
|
26
|
+
// Read go.mod once for Go import resolution
|
|
27
|
+
const goModPrefix = readGoModPrefix(root);
|
|
12
28
|
for (const file of files) {
|
|
13
29
|
let content;
|
|
14
30
|
const cached = contentCache?.get(file.path);
|
|
@@ -24,7 +40,8 @@ export function buildDepGraph(root, files, contentCache) {
|
|
|
24
40
|
continue;
|
|
25
41
|
}
|
|
26
42
|
}
|
|
27
|
-
const
|
|
43
|
+
const family = languageFamily(file.language);
|
|
44
|
+
const resolved = extractImports(content, file.path, family, root, fileSet, goModPrefix);
|
|
28
45
|
imports[file.path] = resolved;
|
|
29
46
|
for (const dep of resolved) {
|
|
30
47
|
if (!dependents[dep]) {
|
|
@@ -35,14 +52,26 @@ export function buildDepGraph(root, files, contentCache) {
|
|
|
35
52
|
}
|
|
36
53
|
return { imports, dependents };
|
|
37
54
|
}
|
|
38
|
-
|
|
55
|
+
// ── Dispatch ────────────────────────────────────────────────────────────────
|
|
56
|
+
function extractImports(content, filePath, family, root, fileSet, goModPrefix) {
|
|
57
|
+
switch (family) {
|
|
58
|
+
case 'python':
|
|
59
|
+
return extractPythonImports(content, filePath, fileSet);
|
|
60
|
+
case 'go':
|
|
61
|
+
return extractGoImports(content, filePath, fileSet, goModPrefix);
|
|
62
|
+
default:
|
|
63
|
+
return extractJsImports(content, filePath, root, fileSet);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
// ── JS/TS imports ───────────────────────────────────────────────────────────
|
|
67
|
+
function extractJsImports(content, filePath, root, fileSet) {
|
|
39
68
|
const specifiers = new Set();
|
|
40
|
-
for (const regex of [
|
|
69
|
+
for (const regex of [JS_IMPORT_RE, JS_REQUIRE_RE]) {
|
|
41
70
|
regex.lastIndex = 0;
|
|
42
71
|
let match;
|
|
43
72
|
while ((match = regex.exec(content)) !== null) {
|
|
44
73
|
const spec = match[1];
|
|
45
|
-
if (spec &&
|
|
74
|
+
if (spec && isRelativeJs(spec)) {
|
|
46
75
|
specifiers.add(spec);
|
|
47
76
|
}
|
|
48
77
|
}
|
|
@@ -50,24 +79,21 @@ function extractImports(content, filePath, root, fileSet) {
|
|
|
50
79
|
const resolved = [];
|
|
51
80
|
const dir = dirname(filePath);
|
|
52
81
|
for (const spec of specifiers) {
|
|
53
|
-
const target =
|
|
82
|
+
const target = resolveJsImport(dir, spec, root, fileSet);
|
|
54
83
|
if (target) {
|
|
55
84
|
resolved.push(target);
|
|
56
85
|
}
|
|
57
86
|
}
|
|
58
87
|
return resolved;
|
|
59
88
|
}
|
|
60
|
-
function
|
|
89
|
+
function isRelativeJs(spec) {
|
|
61
90
|
return spec.startsWith('./') || spec.startsWith('../');
|
|
62
91
|
}
|
|
63
|
-
function
|
|
64
|
-
// Resolve relative path
|
|
92
|
+
function resolveJsImport(fromDir, spec, _root, fileSet) {
|
|
65
93
|
const base = join(fromDir, spec).replace(/\\/g, '/');
|
|
66
|
-
// Try exact match first
|
|
67
94
|
if (fileSet.has(base))
|
|
68
95
|
return base;
|
|
69
|
-
|
|
70
|
-
const extensions = ['.ts', '.tsx', '.js', '.jsx', '.mjs', '.cjs'];
|
|
96
|
+
const extensions = resolutionExtensions('javascript');
|
|
71
97
|
// Strip .js extension if present (ESM convention)
|
|
72
98
|
const withoutJs = base.endsWith('.js') ? base.slice(0, -3) : null;
|
|
73
99
|
if (withoutJs) {
|
|
@@ -84,11 +110,145 @@ function resolveImport(fromDir, spec, _root, fileSet) {
|
|
|
84
110
|
return candidate;
|
|
85
111
|
}
|
|
86
112
|
// Try index files
|
|
87
|
-
for (const
|
|
88
|
-
const candidate = base + '/
|
|
113
|
+
for (const name of indexFileNames('javascript')) {
|
|
114
|
+
const candidate = base + '/' + name;
|
|
89
115
|
if (fileSet.has(candidate))
|
|
90
116
|
return candidate;
|
|
91
117
|
}
|
|
92
118
|
return null;
|
|
93
119
|
}
|
|
120
|
+
// ── Python imports ──────────────────────────────────────────────────────────
|
|
121
|
+
function extractPythonImports(content, filePath, fileSet) {
|
|
122
|
+
const dir = dirname(filePath);
|
|
123
|
+
const resolved = [];
|
|
124
|
+
// Relative imports: from . import foo, from ..utils import bar
|
|
125
|
+
PY_RELATIVE_IMPORT_RE.lastIndex = 0;
|
|
126
|
+
let match;
|
|
127
|
+
while ((match = PY_RELATIVE_IMPORT_RE.exec(content)) !== null) {
|
|
128
|
+
const spec = match[1];
|
|
129
|
+
const target = resolvePythonRelativeImport(dir, spec, fileSet);
|
|
130
|
+
if (target)
|
|
131
|
+
resolved.push(target);
|
|
132
|
+
}
|
|
133
|
+
// Absolute imports: from foo.bar import baz, import foo.bar
|
|
134
|
+
for (const regex of [PY_FROM_IMPORT_RE, PY_IMPORT_RE]) {
|
|
135
|
+
regex.lastIndex = 0;
|
|
136
|
+
while ((match = regex.exec(content)) !== null) {
|
|
137
|
+
const modulePath = match[1];
|
|
138
|
+
if (modulePath.startsWith('.'))
|
|
139
|
+
continue; // already handled
|
|
140
|
+
const target = resolvePythonAbsoluteImport(modulePath, fileSet);
|
|
141
|
+
if (target)
|
|
142
|
+
resolved.push(target);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
return [...new Set(resolved)];
|
|
146
|
+
}
|
|
147
|
+
function resolvePythonRelativeImport(fromDir, spec, fileSet) {
|
|
148
|
+
// Count leading dots
|
|
149
|
+
let dots = 0;
|
|
150
|
+
while (dots < spec.length && spec[dots] === '.')
|
|
151
|
+
dots++;
|
|
152
|
+
const modulePart = spec.slice(dots);
|
|
153
|
+
// Navigate up (dots - 1) directories (one dot = current package)
|
|
154
|
+
let baseDir = fromDir;
|
|
155
|
+
for (let i = 1; i < dots; i++) {
|
|
156
|
+
baseDir = dirname(baseDir);
|
|
157
|
+
}
|
|
158
|
+
const relPath = modulePart ? modulePart.replace(/\./g, '/') : '';
|
|
159
|
+
const base = relPath ? join(baseDir, relPath).replace(/\\/g, '/') : baseDir;
|
|
160
|
+
// Try as .py file
|
|
161
|
+
if (fileSet.has(base + '.py'))
|
|
162
|
+
return base + '.py';
|
|
163
|
+
// Try as package (__init__.py)
|
|
164
|
+
if (fileSet.has(base + '/__init__.py'))
|
|
165
|
+
return base + '/__init__.py';
|
|
166
|
+
// "from . import foo" with no module part → __init__.py in current dir
|
|
167
|
+
if (!modulePart && fileSet.has(baseDir + '/__init__.py'))
|
|
168
|
+
return baseDir + '/__init__.py';
|
|
169
|
+
return null;
|
|
170
|
+
}
|
|
171
|
+
function resolvePythonAbsoluteImport(modulePath, fileSet) {
|
|
172
|
+
const relPath = modulePath.replace(/\./g, '/');
|
|
173
|
+
// Try as .py file
|
|
174
|
+
if (fileSet.has(relPath + '.py'))
|
|
175
|
+
return relPath + '.py';
|
|
176
|
+
// Try as package
|
|
177
|
+
if (fileSet.has(relPath + '/__init__.py'))
|
|
178
|
+
return relPath + '/__init__.py';
|
|
179
|
+
// Try under common source directories
|
|
180
|
+
for (const prefix of ['src/', 'lib/']) {
|
|
181
|
+
if (fileSet.has(prefix + relPath + '.py'))
|
|
182
|
+
return prefix + relPath + '.py';
|
|
183
|
+
if (fileSet.has(prefix + relPath + '/__init__.py'))
|
|
184
|
+
return prefix + relPath + '/__init__.py';
|
|
185
|
+
}
|
|
186
|
+
return null;
|
|
187
|
+
}
|
|
188
|
+
// ── Go imports ──────────────────────────────────────────────────────────────
|
|
189
|
+
function extractGoImports(content, filePath, fileSet, goModPrefix) {
|
|
190
|
+
const importPaths = new Set();
|
|
191
|
+
// Single-line imports
|
|
192
|
+
GO_SINGLE_IMPORT_RE.lastIndex = 0;
|
|
193
|
+
let match;
|
|
194
|
+
while ((match = GO_SINGLE_IMPORT_RE.exec(content)) !== null) {
|
|
195
|
+
importPaths.add(match[1]);
|
|
196
|
+
}
|
|
197
|
+
// Multi-line import blocks
|
|
198
|
+
GO_IMPORT_BLOCK_RE.lastIndex = 0;
|
|
199
|
+
while ((match = GO_IMPORT_BLOCK_RE.exec(content)) !== null) {
|
|
200
|
+
const block = match[1];
|
|
201
|
+
GO_IMPORT_LINE_RE.lastIndex = 0;
|
|
202
|
+
let lineMatch;
|
|
203
|
+
while ((lineMatch = GO_IMPORT_LINE_RE.exec(block)) !== null) {
|
|
204
|
+
importPaths.add(lineMatch[1]);
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
const resolved = [];
|
|
208
|
+
const dir = dirname(filePath);
|
|
209
|
+
for (const importPath of importPaths) {
|
|
210
|
+
// Rare relative imports (./internal/foo)
|
|
211
|
+
if (importPath.startsWith('./') || importPath.startsWith('../')) {
|
|
212
|
+
const base = join(dir, importPath).replace(/\\/g, '/');
|
|
213
|
+
const goFile = findGoFileInDir(base, fileSet);
|
|
214
|
+
if (goFile)
|
|
215
|
+
resolved.push(goFile);
|
|
216
|
+
continue;
|
|
217
|
+
}
|
|
218
|
+
// Module-local imports: strip go.mod module prefix
|
|
219
|
+
if (goModPrefix && importPath.startsWith(goModPrefix + '/')) {
|
|
220
|
+
const localPath = importPath.slice(goModPrefix.length + 1);
|
|
221
|
+
const goFile = findGoFileInDir(localPath, fileSet);
|
|
222
|
+
if (goFile)
|
|
223
|
+
resolved.push(goFile);
|
|
224
|
+
}
|
|
225
|
+
// External imports are silently skipped.
|
|
226
|
+
}
|
|
227
|
+
return [...new Set(resolved)];
|
|
228
|
+
}
|
|
229
|
+
/** Find a representative .go file in a package directory. */
|
|
230
|
+
function findGoFileInDir(dirPath, fileSet) {
|
|
231
|
+
// Direct .go file
|
|
232
|
+
if (fileSet.has(dirPath + '.go'))
|
|
233
|
+
return dirPath + '.go';
|
|
234
|
+
// Find any non-test .go file in the directory
|
|
235
|
+
const normalized = dirPath.replace(/\\/g, '/');
|
|
236
|
+
for (const f of fileSet) {
|
|
237
|
+
if (f.startsWith(normalized + '/') && f.endsWith('.go') && !f.includes('_test.go')) {
|
|
238
|
+
return f;
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
return null;
|
|
242
|
+
}
|
|
243
|
+
/** Read the module path from go.mod. */
|
|
244
|
+
function readGoModPrefix(root) {
|
|
245
|
+
try {
|
|
246
|
+
const gomod = readFileSync(join(root, 'go.mod'), 'utf-8');
|
|
247
|
+
const match = gomod.match(/^module\s+(\S+)/m);
|
|
248
|
+
return match ? match[1] : null;
|
|
249
|
+
}
|
|
250
|
+
catch {
|
|
251
|
+
return null;
|
|
252
|
+
}
|
|
253
|
+
}
|
|
94
254
|
//# sourceMappingURL=dep-graph.js.map
|
package/dist/dep-graph.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dep-graph.js","sourceRoot":"","sources":["../src/dep-graph.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"dep-graph.js","sourceRoot":"","sources":["../src/dep-graph.ts"],"names":[],"mappings":"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"}
|
package/dist/hash.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hash.d.ts","sourceRoot":"","sources":["../src/hash.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAGnD"}
|
package/dist/hash.js
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { createHash } from 'node:crypto';
|
|
2
|
+
import { readFileSync } from 'node:fs';
|
|
3
|
+
/**
|
|
4
|
+
* Compute the SHA-256 hex digest of a file's contents.
|
|
5
|
+
*/
|
|
6
|
+
export function sha256File(filePath) {
|
|
7
|
+
const content = readFileSync(filePath);
|
|
8
|
+
return createHash('sha256').update(content).digest('hex');
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=hash.js.map
|
package/dist/hash.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hash.js","sourceRoot":"","sources":["../src/hash.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvC;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,QAAgB;IACzC,MAAM,OAAO,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;IACvC,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC5D,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -4,4 +4,7 @@ export { analyzeChurn } from './churn.js';
|
|
|
4
4
|
export { buildTestMap } from './test-map.js';
|
|
5
5
|
export { buildRepoIndex } from './indexer.js';
|
|
6
6
|
export type { IndexerOptions } from './indexer.js';
|
|
7
|
+
export { detectLanguage, languageFamily, extensionFamily, resolutionExtensions, indexFileNames } from './lang.js';
|
|
8
|
+
export type { LanguageFamily } from './lang.js';
|
|
9
|
+
export { sha256File } from './hash.js';
|
|
7
10
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,eAAe,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAClH,YAAY,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -3,4 +3,6 @@ export { buildDepGraph } from './dep-graph.js';
|
|
|
3
3
|
export { analyzeChurn } from './churn.js';
|
|
4
4
|
export { buildTestMap } from './test-map.js';
|
|
5
5
|
export { buildRepoIndex } from './indexer.js';
|
|
6
|
+
export { detectLanguage, languageFamily, extensionFamily, resolutionExtensions, indexFileNames } from './lang.js';
|
|
7
|
+
export { sha256File } from './hash.js';
|
|
6
8
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9C,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,eAAe,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAElH,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC"}
|
package/dist/lang.d.ts
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Built-in language registry for CodeLedger.
|
|
3
|
+
*
|
|
4
|
+
* Provides language detection from file extensions, language family grouping,
|
|
5
|
+
* and per-family resolution tables for imports and index files.
|
|
6
|
+
*
|
|
7
|
+
* Users never need to configure language support — this map ships with
|
|
8
|
+
* CodeLedger and covers 30+ common extensions out of the box. Custom
|
|
9
|
+
* extensions can be added via config.language_extensions overrides.
|
|
10
|
+
*/
|
|
11
|
+
export type LanguageFamily = 'javascript' | 'python' | 'go' | 'ruby' | 'rust' | 'java' | 'csharp' | 'cpp' | 'swift' | 'kotlin' | 'php' | 'shell' | 'markup' | 'data' | 'unknown';
|
|
12
|
+
interface LanguageEntry {
|
|
13
|
+
language: string;
|
|
14
|
+
family: LanguageFamily;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Detect language and family from a file extension.
|
|
18
|
+
* Config overrides take precedence over the built-in map.
|
|
19
|
+
*/
|
|
20
|
+
export declare function detectLanguage(ext: string, configOverrides?: Record<string, string>): LanguageEntry;
|
|
21
|
+
/** Map a language string to a family. */
|
|
22
|
+
export declare function languageFamily(language: string): LanguageFamily;
|
|
23
|
+
/** Map a file extension directly to a family (when language string is unavailable). */
|
|
24
|
+
export declare function extensionFamily(ext: string): LanguageFamily;
|
|
25
|
+
/** Extensions to try when resolving imports for a language family. */
|
|
26
|
+
export declare function resolutionExtensions(family: LanguageFamily): string[];
|
|
27
|
+
/** Index file names for package/directory imports. */
|
|
28
|
+
export declare function indexFileNames(family: LanguageFamily): string[];
|
|
29
|
+
export {};
|
|
30
|
+
//# sourceMappingURL=lang.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lang.d.ts","sourceRoot":"","sources":["../src/lang.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,MAAM,MAAM,cAAc,GACtB,YAAY,GACZ,QAAQ,GACR,IAAI,GACJ,MAAM,GACN,MAAM,GACN,MAAM,GACN,QAAQ,GACR,KAAK,GACL,OAAO,GACP,QAAQ,GACR,KAAK,GACL,OAAO,GACP,QAAQ,GACR,MAAM,GACN,SAAS,CAAC;AAEd,UAAU,aAAa;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,cAAc,CAAC;CACxB;AAmED;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,GAAG,EAAE,MAAM,EACX,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GACvC,aAAa,CAYf;AAED,yCAAyC;AACzC,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,cAAc,CAE/D;AAED,uFAAuF;AACvF,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,cAAc,CAE3D;AAED,sEAAsE;AACtE,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,EAAE,CAerE;AAED,sDAAsD;AACtD,wBAAgB,cAAc,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,EAAE,CAM/D"}
|
package/dist/lang.js
ADDED
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Built-in language registry for CodeLedger.
|
|
3
|
+
*
|
|
4
|
+
* Provides language detection from file extensions, language family grouping,
|
|
5
|
+
* and per-family resolution tables for imports and index files.
|
|
6
|
+
*
|
|
7
|
+
* Users never need to configure language support — this map ships with
|
|
8
|
+
* CodeLedger and covers 30+ common extensions out of the box. Custom
|
|
9
|
+
* extensions can be added via config.language_extensions overrides.
|
|
10
|
+
*/
|
|
11
|
+
/** Comprehensive built-in extension→language map. */
|
|
12
|
+
const KNOWN_EXTENSIONS = {
|
|
13
|
+
// JavaScript / TypeScript
|
|
14
|
+
'.ts': { language: 'typescript', family: 'javascript' },
|
|
15
|
+
'.tsx': { language: 'typescript-react', family: 'javascript' },
|
|
16
|
+
'.js': { language: 'javascript', family: 'javascript' },
|
|
17
|
+
'.jsx': { language: 'javascript-react', family: 'javascript' },
|
|
18
|
+
'.mjs': { language: 'javascript', family: 'javascript' },
|
|
19
|
+
'.cjs': { language: 'javascript', family: 'javascript' },
|
|
20
|
+
'.vue': { language: 'vue', family: 'javascript' },
|
|
21
|
+
'.svelte': { language: 'svelte', family: 'javascript' },
|
|
22
|
+
// Python
|
|
23
|
+
'.py': { language: 'python', family: 'python' },
|
|
24
|
+
'.pyi': { language: 'python-stub', family: 'python' },
|
|
25
|
+
// Go
|
|
26
|
+
'.go': { language: 'go', family: 'go' },
|
|
27
|
+
// Rust
|
|
28
|
+
'.rs': { language: 'rust', family: 'rust' },
|
|
29
|
+
// Ruby
|
|
30
|
+
'.rb': { language: 'ruby', family: 'ruby' },
|
|
31
|
+
'.rake': { language: 'ruby', family: 'ruby' },
|
|
32
|
+
// Java / Kotlin
|
|
33
|
+
'.java': { language: 'java', family: 'java' },
|
|
34
|
+
'.kt': { language: 'kotlin', family: 'kotlin' },
|
|
35
|
+
'.kts': { language: 'kotlin', family: 'kotlin' },
|
|
36
|
+
// C#
|
|
37
|
+
'.cs': { language: 'csharp', family: 'csharp' },
|
|
38
|
+
// C / C++
|
|
39
|
+
'.c': { language: 'c', family: 'cpp' },
|
|
40
|
+
'.h': { language: 'c-header', family: 'cpp' },
|
|
41
|
+
'.cpp': { language: 'cpp', family: 'cpp' },
|
|
42
|
+
'.hpp': { language: 'cpp-header', family: 'cpp' },
|
|
43
|
+
'.cc': { language: 'cpp', family: 'cpp' },
|
|
44
|
+
// Swift
|
|
45
|
+
'.swift': { language: 'swift', family: 'swift' },
|
|
46
|
+
// PHP
|
|
47
|
+
'.php': { language: 'php', family: 'php' },
|
|
48
|
+
// Shell
|
|
49
|
+
'.sh': { language: 'shell', family: 'shell' },
|
|
50
|
+
'.bash': { language: 'shell', family: 'shell' },
|
|
51
|
+
'.zsh': { language: 'shell', family: 'shell' },
|
|
52
|
+
// Markup / Config
|
|
53
|
+
'.md': { language: 'markdown', family: 'markup' },
|
|
54
|
+
'.html': { language: 'html', family: 'markup' },
|
|
55
|
+
'.css': { language: 'css', family: 'markup' },
|
|
56
|
+
'.scss': { language: 'scss', family: 'markup' },
|
|
57
|
+
// Data / Config
|
|
58
|
+
'.json': { language: 'json', family: 'data' },
|
|
59
|
+
'.yaml': { language: 'yaml', family: 'data' },
|
|
60
|
+
'.yml': { language: 'yaml', family: 'data' },
|
|
61
|
+
'.toml': { language: 'toml', family: 'data' },
|
|
62
|
+
'.xml': { language: 'xml', family: 'data' },
|
|
63
|
+
'.sql': { language: 'sql', family: 'data' },
|
|
64
|
+
'.proto': { language: 'protobuf', family: 'data' },
|
|
65
|
+
'.graphql': { language: 'graphql', family: 'data' },
|
|
66
|
+
'.gql': { language: 'graphql', family: 'data' },
|
|
67
|
+
'.prisma': { language: 'prisma', family: 'data' },
|
|
68
|
+
};
|
|
69
|
+
/** Reverse map from language name to family (built lazily). */
|
|
70
|
+
const LANGUAGE_TO_FAMILY = new Map();
|
|
71
|
+
for (const entry of Object.values(KNOWN_EXTENSIONS)) {
|
|
72
|
+
LANGUAGE_TO_FAMILY.set(entry.language, entry.family);
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Detect language and family from a file extension.
|
|
76
|
+
* Config overrides take precedence over the built-in map.
|
|
77
|
+
*/
|
|
78
|
+
export function detectLanguage(ext, configOverrides) {
|
|
79
|
+
const lower = ext.toLowerCase();
|
|
80
|
+
// Config overrides first
|
|
81
|
+
if (configOverrides?.[lower]) {
|
|
82
|
+
const lang = configOverrides[lower];
|
|
83
|
+
const family = LANGUAGE_TO_FAMILY.get(lang) ?? inferFamily(lang);
|
|
84
|
+
return { language: lang, family };
|
|
85
|
+
}
|
|
86
|
+
// Built-in map
|
|
87
|
+
return KNOWN_EXTENSIONS[lower] ?? { language: 'unknown', family: 'unknown' };
|
|
88
|
+
}
|
|
89
|
+
/** Map a language string to a family. */
|
|
90
|
+
export function languageFamily(language) {
|
|
91
|
+
return LANGUAGE_TO_FAMILY.get(language) ?? inferFamily(language);
|
|
92
|
+
}
|
|
93
|
+
/** Map a file extension directly to a family (when language string is unavailable). */
|
|
94
|
+
export function extensionFamily(ext) {
|
|
95
|
+
return KNOWN_EXTENSIONS[ext.toLowerCase()]?.family ?? 'unknown';
|
|
96
|
+
}
|
|
97
|
+
/** Extensions to try when resolving imports for a language family. */
|
|
98
|
+
export function resolutionExtensions(family) {
|
|
99
|
+
switch (family) {
|
|
100
|
+
case 'javascript': return ['.ts', '.tsx', '.js', '.jsx', '.mjs', '.cjs'];
|
|
101
|
+
case 'python': return ['.py'];
|
|
102
|
+
case 'go': return ['.go'];
|
|
103
|
+
case 'ruby': return ['.rb'];
|
|
104
|
+
case 'rust': return ['.rs'];
|
|
105
|
+
case 'java': return ['.java'];
|
|
106
|
+
case 'kotlin': return ['.kt', '.kts'];
|
|
107
|
+
case 'csharp': return ['.cs'];
|
|
108
|
+
case 'cpp': return ['.c', '.cpp', '.cc', '.h', '.hpp'];
|
|
109
|
+
case 'swift': return ['.swift'];
|
|
110
|
+
case 'php': return ['.php'];
|
|
111
|
+
default: return [];
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
/** Index file names for package/directory imports. */
|
|
115
|
+
export function indexFileNames(family) {
|
|
116
|
+
switch (family) {
|
|
117
|
+
case 'javascript': return ['index.ts', 'index.tsx', 'index.js', 'index.jsx', 'index.mjs', 'index.cjs'];
|
|
118
|
+
case 'python': return ['__init__.py'];
|
|
119
|
+
default: return [];
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
/** Infer family from a language string using substring matching (for custom languages). */
|
|
123
|
+
function inferFamily(language) {
|
|
124
|
+
const lower = language.toLowerCase();
|
|
125
|
+
if (lower.includes('typescript') || lower.includes('javascript'))
|
|
126
|
+
return 'javascript';
|
|
127
|
+
if (lower.includes('python'))
|
|
128
|
+
return 'python';
|
|
129
|
+
if (lower.includes('go') || lower === 'golang')
|
|
130
|
+
return 'go';
|
|
131
|
+
if (lower.includes('ruby'))
|
|
132
|
+
return 'ruby';
|
|
133
|
+
if (lower.includes('rust'))
|
|
134
|
+
return 'rust';
|
|
135
|
+
if (lower.includes('java') && !lower.includes('javascript'))
|
|
136
|
+
return 'java';
|
|
137
|
+
if (lower.includes('kotlin'))
|
|
138
|
+
return 'kotlin';
|
|
139
|
+
if (lower.includes('csharp') || lower.includes('c#'))
|
|
140
|
+
return 'csharp';
|
|
141
|
+
if (lower.includes('swift'))
|
|
142
|
+
return 'swift';
|
|
143
|
+
if (lower.includes('php'))
|
|
144
|
+
return 'php';
|
|
145
|
+
return 'unknown';
|
|
146
|
+
}
|
|
147
|
+
//# sourceMappingURL=lang.js.map
|
package/dist/lang.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lang.js","sourceRoot":"","sources":["../src/lang.ts"],"names":[],"mappings":"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"}
|
package/dist/scanner.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scanner.d.ts","sourceRoot":"","sources":["../src/scanner.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"scanner.d.ts","sourceRoot":"","sources":["../src/scanner.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAK9D,wBAAgB,SAAS,CACvB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,UAAU,EAClB,YAAY,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GACjC,QAAQ,EAAE,CAuCZ"}
|
package/dist/scanner.js
CHANGED
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
import { readFileSync, statSync } from 'node:fs';
|
|
2
2
|
import { extname, relative } from 'node:path';
|
|
3
3
|
import { walkFiles } from './walk.js';
|
|
4
|
+
import { detectLanguage, languageFamily } from './lang.js';
|
|
4
5
|
export function scanFiles(root, config, contentCache) {
|
|
5
6
|
const allPaths = walkFiles(root, config.include, config.exclude);
|
|
6
7
|
const files = [];
|
|
7
8
|
for (const absPath of allPaths) {
|
|
8
9
|
const rel = relative(root, absPath);
|
|
9
10
|
const ext = extname(rel);
|
|
10
|
-
const language = config.language_extensions
|
|
11
|
+
const { language } = detectLanguage(ext, config.language_extensions);
|
|
11
12
|
const isTest = config.test_patterns.some((pat) => matchGlob(rel, pat));
|
|
12
13
|
let lines = 0;
|
|
13
14
|
let size = 0;
|
|
@@ -35,7 +36,7 @@ export function scanFiles(root, config, contentCache) {
|
|
|
35
36
|
lines,
|
|
36
37
|
size,
|
|
37
38
|
is_test: isTest,
|
|
38
|
-
content_keywords: extractContentKeywords(content),
|
|
39
|
+
content_keywords: extractContentKeywords(content, language),
|
|
39
40
|
});
|
|
40
41
|
}
|
|
41
42
|
return files;
|
|
@@ -43,31 +44,56 @@ export function scanFiles(root, config, contentCache) {
|
|
|
43
44
|
/**
|
|
44
45
|
* Extract meaningful identifiers from file content for content-aware matching.
|
|
45
46
|
*
|
|
46
|
-
*
|
|
47
|
-
* -
|
|
48
|
-
* -
|
|
49
|
-
* -
|
|
47
|
+
* Dispatches to per-language declaration regexes:
|
|
48
|
+
* - JS/TS: function, class, interface, type, const, enum, let, var
|
|
49
|
+
* - Python: def, class, async def
|
|
50
|
+
* - Go: func, type, var, const
|
|
51
|
+
* - Other: falls back to JS/TS patterns + JSON keys
|
|
50
52
|
*
|
|
51
53
|
* Returns deduplicated lowercase tokens (length > 2) capped at 50 entries.
|
|
52
54
|
*/
|
|
53
|
-
|
|
55
|
+
// JS/TS declarations
|
|
56
|
+
const JS_DECL_RE = /(?:export\s+)?(?:async\s+)?(?:function|class|interface|type|const|enum|let|var)\s+([A-Za-z_$][A-Za-z0-9_$]*)/g;
|
|
57
|
+
// Python declarations: def foo, class Foo, async def foo
|
|
58
|
+
const PY_DECL_RE = /(?:async\s+)?(?:def|class)\s+([A-Za-z_][A-Za-z0-9_]*)/g;
|
|
59
|
+
// Go declarations: func Foo, func (r *Receiver) Foo, type Foo, var foo, const foo
|
|
60
|
+
const GO_DECL_RE = /(?:func\s+(?:\([^)]*\)\s+)?|type\s+|var\s+|const\s+)([A-Za-z_][A-Za-z0-9_]*)/g;
|
|
61
|
+
// JSON-like keys: "key": or key:
|
|
62
|
+
const JSON_KEY_RE = /["']?([a-zA-Z_][a-zA-Z0-9_]*)["']?\s*:/g;
|
|
63
|
+
function getDeclRegex(family) {
|
|
64
|
+
switch (family) {
|
|
65
|
+
case 'python': return PY_DECL_RE;
|
|
66
|
+
case 'go': return GO_DECL_RE;
|
|
67
|
+
default: return JS_DECL_RE;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
function isExportLine(line, family) {
|
|
71
|
+
const trimmed = line.trimStart();
|
|
72
|
+
switch (family) {
|
|
73
|
+
case 'python':
|
|
74
|
+
return /^(?:def |class |async def |@)/.test(trimmed);
|
|
75
|
+
case 'go':
|
|
76
|
+
return /^(?:func |type |var |const )/.test(trimmed);
|
|
77
|
+
default:
|
|
78
|
+
return trimmed.startsWith('export ');
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
function extractContentKeywords(content, language) {
|
|
54
82
|
const tokens = new Set();
|
|
55
83
|
const lines = content.split('\n');
|
|
56
|
-
|
|
57
|
-
const
|
|
58
|
-
//
|
|
59
|
-
const JSON_KEY_RE = /["']?([a-zA-Z_][a-zA-Z0-9_]*)["']?\s*:/g;
|
|
60
|
-
// Scan the first 50 lines for identifiers + all export lines
|
|
84
|
+
const family = languageFamily(language);
|
|
85
|
+
const declRegex = getDeclRegex(family);
|
|
86
|
+
// Scan the first 50 lines for identifiers + all export/declaration lines
|
|
61
87
|
for (let i = 0; i < lines.length; i++) {
|
|
62
88
|
const line = lines[i];
|
|
63
89
|
const isHead = i < 50;
|
|
64
|
-
const isExport = line
|
|
90
|
+
const isExport = isExportLine(line, family);
|
|
65
91
|
if (!isHead && !isExport)
|
|
66
92
|
continue;
|
|
67
93
|
// Extract declaration names
|
|
68
94
|
let m;
|
|
69
|
-
|
|
70
|
-
while ((m =
|
|
95
|
+
declRegex.lastIndex = 0;
|
|
96
|
+
while ((m = declRegex.exec(line)) !== null) {
|
|
71
97
|
addIdentifierTokens(m[1], tokens);
|
|
72
98
|
}
|
|
73
99
|
// Extract JSON/object keys from head section
|
package/dist/scanner.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scanner.js","sourceRoot":"","sources":["../src/scanner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAE9C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"scanner.js","sourceRoot":"","sources":["../src/scanner.ts"],"names":[],"mappings":"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"}
|
package/dist/test-map.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test-map.d.ts","sourceRoot":"","sources":["../src/test-map.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"test-map.d.ts","sourceRoot":"","sources":["../src/test-map.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAI/D,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,YAAY,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,WAAW,EAAE,CAqB/G"}
|
package/dist/test-map.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { readFileSync } from 'node:fs';
|
|
2
|
-
import { basename, dirname, join } from 'node:path';
|
|
2
|
+
import { basename, dirname, extname, join } from 'node:path';
|
|
3
|
+
import { extensionFamily, resolutionExtensions, indexFileNames } from './lang.js';
|
|
3
4
|
export function buildTestMap(root, files, contentCache) {
|
|
4
5
|
const mappings = [];
|
|
5
6
|
const sourceSet = new Set(files.filter((f) => !f.is_test).map((f) => f.path));
|
|
@@ -22,6 +23,47 @@ export function buildTestMap(root, files, contentCache) {
|
|
|
22
23
|
function conventionMatch(testPath, sourceSet) {
|
|
23
24
|
const base = basename(testPath);
|
|
24
25
|
const dir = dirname(testPath);
|
|
26
|
+
const ext = extname(testPath);
|
|
27
|
+
const family = extensionFamily(ext);
|
|
28
|
+
// ── Python test conventions ───────────────────────────────────────────
|
|
29
|
+
if (family === 'python') {
|
|
30
|
+
// test_foo.py → foo.py (prefix-based, most common Python convention)
|
|
31
|
+
if (base.startsWith('test_')) {
|
|
32
|
+
const sourceBase = base.slice(5); // strip "test_"
|
|
33
|
+
// Same directory
|
|
34
|
+
const sameDirCandidate = join(dir, sourceBase);
|
|
35
|
+
if (sourceSet.has(sameDirCandidate))
|
|
36
|
+
return sameDirCandidate;
|
|
37
|
+
// tests/ → parent or src/ mirror
|
|
38
|
+
if (dir.includes('tests')) {
|
|
39
|
+
const parentDir = dir.replace(/\btests\b\/?/, '');
|
|
40
|
+
const parentCandidate = join(parentDir, sourceBase);
|
|
41
|
+
if (sourceSet.has(parentCandidate))
|
|
42
|
+
return parentCandidate;
|
|
43
|
+
const srcCandidate = join(parentDir, 'src', sourceBase);
|
|
44
|
+
if (sourceSet.has(srcCandidate))
|
|
45
|
+
return srcCandidate;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
// foo_test.py → foo.py (suffix-based)
|
|
49
|
+
if (base.endsWith('_test.py')) {
|
|
50
|
+
const sourceBase = base.slice(0, -8) + '.py';
|
|
51
|
+
const sameDirCandidate = join(dir, sourceBase);
|
|
52
|
+
if (sourceSet.has(sameDirCandidate))
|
|
53
|
+
return sameDirCandidate;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
// ── Go test conventions ───────────────────────────────────────────────
|
|
57
|
+
if (family === 'go') {
|
|
58
|
+
// foo_test.go → foo.go (Go convention: tests are co-located)
|
|
59
|
+
if (base.endsWith('_test.go')) {
|
|
60
|
+
const sourceBase = base.slice(0, -8) + '.go';
|
|
61
|
+
const sameDirCandidate = join(dir, sourceBase);
|
|
62
|
+
if (sourceSet.has(sameDirCandidate))
|
|
63
|
+
return sameDirCandidate;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
// ── JS/TS test conventions (also fallback for other languages) ────────
|
|
25
67
|
// foo.test.ts → foo.ts, foo.spec.ts → foo.ts
|
|
26
68
|
const sourceBase = base
|
|
27
69
|
.replace(/\.test\./, '.')
|
|
@@ -47,6 +89,14 @@ function conventionMatch(testPath, sourceSet) {
|
|
|
47
89
|
return srcCandidate;
|
|
48
90
|
}
|
|
49
91
|
}
|
|
92
|
+
// Check tests/ convention: tests/foo.test.ts → src/foo.ts
|
|
93
|
+
if (dir.startsWith('tests/') || dir.startsWith('tests\\')) {
|
|
94
|
+
const srcDir = 'src/' + dir.slice(6);
|
|
95
|
+
const srcCandidate = join(srcDir, sourceBase);
|
|
96
|
+
if (sourceSet.has(srcCandidate)) {
|
|
97
|
+
return srcCandidate;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
50
100
|
return null;
|
|
51
101
|
}
|
|
52
102
|
function importMatch(root, testPath, sourceSet, contentCache) {
|
|
@@ -64,6 +114,21 @@ function importMatch(root, testPath, sourceSet, contentCache) {
|
|
|
64
114
|
return [];
|
|
65
115
|
}
|
|
66
116
|
}
|
|
117
|
+
const ext = extname(testPath);
|
|
118
|
+
const family = extensionFamily(ext);
|
|
119
|
+
switch (family) {
|
|
120
|
+
case 'python':
|
|
121
|
+
return extractPythonTestImports(content, testPath, sourceSet);
|
|
122
|
+
case 'go':
|
|
123
|
+
// Go test mapping is primarily convention-based (co-located files).
|
|
124
|
+
// Import-based mapping is less useful since Go imports packages.
|
|
125
|
+
return [];
|
|
126
|
+
default:
|
|
127
|
+
return extractJsTestImports(content, testPath, sourceSet);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
// ── JS/TS import-based test mapping ─────────────────────────────────────────
|
|
131
|
+
function extractJsTestImports(content, testPath, sourceSet) {
|
|
67
132
|
const importRe = /(?:import|export)\s+(?:[\s\S]*?\s+from\s+)?['"]([^'"]+)['"]/g;
|
|
68
133
|
const sources = [];
|
|
69
134
|
let match;
|
|
@@ -71,32 +136,86 @@ function importMatch(root, testPath, sourceSet, contentCache) {
|
|
|
71
136
|
const spec = match[1];
|
|
72
137
|
if (!spec || !spec.startsWith('.'))
|
|
73
138
|
continue;
|
|
74
|
-
const resolved = resolveTestImport(dirname(testPath), spec, sourceSet);
|
|
139
|
+
const resolved = resolveTestImport(dirname(testPath), spec, sourceSet, 'javascript');
|
|
75
140
|
if (resolved) {
|
|
76
141
|
sources.push(resolved);
|
|
77
142
|
}
|
|
78
143
|
}
|
|
79
144
|
return sources;
|
|
80
145
|
}
|
|
81
|
-
|
|
146
|
+
// ── Python import-based test mapping ────────────────────────────────────────
|
|
147
|
+
const PY_FROM_IMPORT_RE = /^from\s+([\w.]+)\s+import\b/gm;
|
|
148
|
+
const PY_IMPORT_RE = /^import\s+([\w.]+)/gm;
|
|
149
|
+
const PY_RELATIVE_IMPORT_RE = /^from\s+(\.+[\w.]*)\s+import\b/gm;
|
|
150
|
+
function extractPythonTestImports(content, testPath, sourceSet) {
|
|
151
|
+
const dir = dirname(testPath);
|
|
152
|
+
const sources = [];
|
|
153
|
+
// Relative imports
|
|
154
|
+
PY_RELATIVE_IMPORT_RE.lastIndex = 0;
|
|
155
|
+
let match;
|
|
156
|
+
while ((match = PY_RELATIVE_IMPORT_RE.exec(content)) !== null) {
|
|
157
|
+
const spec = match[1];
|
|
158
|
+
let dots = 0;
|
|
159
|
+
while (dots < spec.length && spec[dots] === '.')
|
|
160
|
+
dots++;
|
|
161
|
+
const modulePart = spec.slice(dots);
|
|
162
|
+
let baseDir = dir;
|
|
163
|
+
for (let i = 1; i < dots; i++)
|
|
164
|
+
baseDir = dirname(baseDir);
|
|
165
|
+
const relPath = modulePart ? modulePart.replace(/\./g, '/') : '';
|
|
166
|
+
const base = relPath ? join(baseDir, relPath).replace(/\\/g, '/') : baseDir;
|
|
167
|
+
if (sourceSet.has(base + '.py'))
|
|
168
|
+
sources.push(base + '.py');
|
|
169
|
+
else if (sourceSet.has(base + '/__init__.py'))
|
|
170
|
+
sources.push(base + '/__init__.py');
|
|
171
|
+
}
|
|
172
|
+
// Absolute imports
|
|
173
|
+
for (const regex of [PY_FROM_IMPORT_RE, PY_IMPORT_RE]) {
|
|
174
|
+
regex.lastIndex = 0;
|
|
175
|
+
while ((match = regex.exec(content)) !== null) {
|
|
176
|
+
const modulePath = match[1];
|
|
177
|
+
if (modulePath.startsWith('.'))
|
|
178
|
+
continue;
|
|
179
|
+
const relPath = modulePath.replace(/\./g, '/');
|
|
180
|
+
for (const prefix of ['', 'src/', 'lib/']) {
|
|
181
|
+
const path = prefix + relPath;
|
|
182
|
+
if (sourceSet.has(path + '.py')) {
|
|
183
|
+
sources.push(path + '.py');
|
|
184
|
+
break;
|
|
185
|
+
}
|
|
186
|
+
if (sourceSet.has(path + '/__init__.py')) {
|
|
187
|
+
sources.push(path + '/__init__.py');
|
|
188
|
+
break;
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
return [...new Set(sources)];
|
|
194
|
+
}
|
|
195
|
+
// ── Shared resolution ───────────────────────────────────────────────────────
|
|
196
|
+
function resolveTestImport(fromDir, spec, sourceSet, family) {
|
|
82
197
|
const base = join(fromDir, spec).replace(/\\/g, '/');
|
|
83
198
|
if (sourceSet.has(base))
|
|
84
199
|
return base;
|
|
85
|
-
const extensions =
|
|
86
|
-
|
|
87
|
-
if (
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
200
|
+
const extensions = resolutionExtensions(family);
|
|
201
|
+
// JS-specific: strip .js extension (ESM convention)
|
|
202
|
+
if (family === 'javascript') {
|
|
203
|
+
const withoutJs = base.endsWith('.js') ? base.slice(0, -3) : null;
|
|
204
|
+
if (withoutJs) {
|
|
205
|
+
for (const ext of extensions) {
|
|
206
|
+
if (sourceSet.has(withoutJs + ext))
|
|
207
|
+
return withoutJs + ext;
|
|
208
|
+
}
|
|
91
209
|
}
|
|
92
210
|
}
|
|
93
211
|
for (const ext of extensions) {
|
|
94
212
|
if (sourceSet.has(base + ext))
|
|
95
213
|
return base + ext;
|
|
96
214
|
}
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
215
|
+
// Index files
|
|
216
|
+
for (const name of indexFileNames(family)) {
|
|
217
|
+
if (sourceSet.has(base + '/' + name))
|
|
218
|
+
return base + '/' + name;
|
|
100
219
|
}
|
|
101
220
|
return null;
|
|
102
221
|
}
|
package/dist/test-map.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test-map.js","sourceRoot":"","sources":["../src/test-map.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"test-map.js","sourceRoot":"","sources":["../src/test-map.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAE7D,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAGlF,MAAM,UAAU,YAAY,CAAC,IAAY,EAAE,KAAiB,EAAE,YAAkC;IAC9F,MAAM,QAAQ,GAAkB,EAAE,CAAC;IACnC,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAC9E,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IAEjD,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACjC,uCAAuC;QACvC,MAAM,gBAAgB,GAAG,eAAe,CAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QACnE,IAAI,gBAAgB,EAAE,CAAC;YACrB,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,IAAI,EAAE,WAAW,EAAE,gBAAgB,EAAE,CAAC,CAAC;YAC3E,SAAS;QACX,CAAC;QAED,mCAAmC;QACnC,MAAM,aAAa,GAAG,WAAW,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC;QAChF,KAAK,MAAM,MAAM,IAAI,aAAa,EAAE,CAAC;YACnC,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,CAAC;QACnE,CAAC;IACH,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,eAAe,CAAC,QAAgB,EAAE,SAAsB;IAC/D,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAChC,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC9B,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC9B,MAAM,MAAM,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;IAEpC,yEAAyE;IACzE,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;QACxB,qEAAqE;QACrE,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YAC7B,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,gBAAgB;YAClD,iBAAiB;YACjB,MAAM,gBAAgB,GAAG,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;YAC/C,IAAI,SAAS,CAAC,GAAG,CAAC,gBAAgB,CAAC;gBAAE,OAAO,gBAAgB,CAAC;YAE7D,iCAAiC;YACjC,IAAI,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC1B,MAAM,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;gBAClD,MAAM,eAAe,GAAG,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;gBACpD,IAAI,SAAS,CAAC,GAAG,CAAC,eAAe,CAAC;oBAAE,OAAO,eAAe,CAAC;gBAC3D,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;gBACxD,IAAI,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC;oBAAE,OAAO,YAAY,CAAC;YACvD,CAAC;QACH,CAAC;QAED,sCAAsC;QACtC,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;YAC9B,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;YAC7C,MAAM,gBAAgB,GAAG,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;YAC/C,IAAI,SAAS,CAAC,GAAG,CAAC,gBAAgB,CAAC;gBAAE,OAAO,gBAAgB,CAAC;QAC/D,CAAC;IACH,CAAC;IAED,yEAAyE;IACzE,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QACpB,6DAA6D;QAC7D,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;YAC9B,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;YAC7C,MAAM,gBAAgB,GAAG,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;YAC/C,IAAI,SAAS,CAAC,GAAG,CAAC,gBAAgB,CAAC;gBAAE,OAAO,gBAAgB,CAAC;QAC/D,CAAC;IACH,CAAC;IAED,yEAAyE;IAEzE,6CAA6C;IAC7C,MAAM,UAAU,GAAG,IAAI;SACpB,OAAO,CAAC,UAAU,EAAE,GAAG,CAAC;SACxB,OAAO,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;IAE5B,uBAAuB;IACvB,MAAM,gBAAgB,GAAG,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;IAC/C,IAAI,SAAS,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE,CAAC;QACpC,OAAO,gBAAgB,CAAC;IAC1B,CAAC;IAED,gEAAgE;IAChE,IAAI,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;QAC9B,MAAM,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;QAClD,MAAM,eAAe,GAAG,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;QACpD,IAAI,SAAS,CAAC,GAAG,CAAC,eAAe,CAAC,EAAE,CAAC;YACnC,OAAO,eAAe,CAAC;QACzB,CAAC;IACH,CAAC;IAED,wDAAwD;IACxD,IAAI,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QACxD,MAAM,MAAM,GAAG,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACrC,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QAC9C,IAAI,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC;YAChC,OAAO,YAAY,CAAC;QACtB,CAAC;IACH,CAAC;IAED,0DAA0D;IAC1D,IAAI,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC1D,MAAM,MAAM,GAAG,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACrC,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QAC9C,IAAI,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC;YAChC,OAAO,YAAY,CAAC;QACtB,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,WAAW,CAClB,IAAY,EACZ,QAAgB,EAChB,SAAsB,EACtB,YAAkC;IAElC,IAAI,OAAe,CAAC;IACpB,MAAM,MAAM,GAAG,YAAY,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC3C,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,OAAO,GAAG,MAAM,CAAC;IACnB,CAAC;SAAM,CAAC;QACN,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QACrC,IAAI,CAAC;YACH,OAAO,GAAG,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC3C,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IAED,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC9B,MAAM,MAAM,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;IAEpC,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,QAAQ;YACX,OAAO,wBAAwB,CAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;QAChE,KAAK,IAAI;YACP,oEAAoE;YACpE,iEAAiE;YACjE,OAAO,EAAE,CAAC;QACZ;YACE,OAAO,oBAAoB,CAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;IAC9D,CAAC;AACH,CAAC;AAED,+EAA+E;AAE/E,SAAS,oBAAoB,CAC3B,OAAe,EACf,QAAgB,EAChB,SAAsB;IAEtB,MAAM,QAAQ,GACZ,8DAA8D,CAAC;IACjE,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,IAAI,KAA6B,CAAC;IAElC,OAAO,CAAC,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QACjD,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACtB,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,SAAS;QAE7C,MAAM,QAAQ,GAAG,iBAAiB,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC;QACrF,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACzB,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,+EAA+E;AAE/E,MAAM,iBAAiB,GAAG,+BAA+B,CAAC;AAC1D,MAAM,YAAY,GAAG,sBAAsB,CAAC;AAC5C,MAAM,qBAAqB,GAAG,kCAAkC,CAAC;AAEjE,SAAS,wBAAwB,CAC/B,OAAe,EACf,QAAgB,EAChB,SAAsB;IAEtB,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC9B,MAAM,OAAO,GAAa,EAAE,CAAC;IAE7B,mBAAmB;IACnB,qBAAqB,CAAC,SAAS,GAAG,CAAC,CAAC;IACpC,IAAI,KAA6B,CAAC;IAClC,OAAO,CAAC,KAAK,GAAG,qBAAqB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QAC9D,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC;QACvB,IAAI,IAAI,GAAG,CAAC,CAAC;QACb,OAAO,IAAI,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG;YAAE,IAAI,EAAE,CAAC;QACxD,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACpC,IAAI,OAAO,GAAG,GAAG,CAAC;QAClB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE;YAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;QAC1D,MAAM,OAAO,GAAG,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACjE,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;QAE5E,IAAI,SAAS,CAAC,GAAG,CAAC,IAAI,GAAG,KAAK,CAAC;YAAE,OAAO,CAAC,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC;aACvD,IAAI,SAAS,CAAC,GAAG,CAAC,IAAI,GAAG,cAAc,CAAC;YAAE,OAAO,CAAC,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC,CAAC;IACrF,CAAC;IAED,mBAAmB;IACnB,KAAK,MAAM,KAAK,IAAI,CAAC,iBAAiB,EAAE,YAAY,CAAC,EAAE,CAAC;QACtD,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC;QACpB,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YAC9C,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC;YAC7B,IAAI,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC;gBAAE,SAAS;YACzC,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;YAE/C,KAAK,MAAM,MAAM,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;gBAC1C,MAAM,IAAI,GAAG,MAAM,GAAG,OAAO,CAAC;gBAC9B,IAAI,SAAS,CAAC,GAAG,CAAC,IAAI,GAAG,KAAK,CAAC,EAAE,CAAC;oBAAC,OAAO,CAAC,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC;oBAAC,MAAM;gBAAC,CAAC;gBACvE,IAAI,SAAS,CAAC,GAAG,CAAC,IAAI,GAAG,cAAc,CAAC,EAAE,CAAC;oBAAC,OAAO,CAAC,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC,CAAC;oBAAC,MAAM;gBAAC,CAAC;YAC3F,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;AAC/B,CAAC;AAED,+EAA+E;AAE/E,SAAS,iBAAiB,CACxB,OAAe,EACf,IAAY,EACZ,SAAsB,EACtB,MAAsB;IAEtB,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAErD,IAAI,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IAErC,MAAM,UAAU,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAEhD,oDAAoD;IACpD,IAAI,MAAM,KAAK,YAAY,EAAE,CAAC;QAC5B,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAClE,IAAI,SAAS,EAAE,CAAC;YACd,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;gBAC7B,IAAI,SAAS,CAAC,GAAG,CAAC,SAAS,GAAG,GAAG,CAAC;oBAAE,OAAO,SAAS,GAAG,GAAG,CAAC;YAC7D,CAAC;QACH,CAAC;IACH,CAAC;IAED,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;QAC7B,IAAI,SAAS,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC;YAAE,OAAO,IAAI,GAAG,GAAG,CAAC;IACnD,CAAC;IAED,cAAc;IACd,KAAK,MAAM,IAAI,IAAI,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1C,IAAI,SAAS,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC;YAAE,OAAO,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC;IACjE,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
|
package/dist/walk.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"walk.d.ts","sourceRoot":"","sources":["../src/walk.ts"],"names":[],"mappings":"AAQA,wBAAgB,SAAS,CACvB,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,MAAM,EAAE,EACtB,YAAY,EAAE,MAAM,EAAE,GACrB,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"walk.d.ts","sourceRoot":"","sources":["../src/walk.ts"],"names":[],"mappings":"AAQA,wBAAgB,SAAS,CACvB,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,MAAM,EAAE,EACtB,YAAY,EAAE,MAAM,EAAE,GACrB,MAAM,EAAE,CAWV"}
|
package/dist/walk.js
CHANGED
|
@@ -5,28 +5,29 @@ const ALWAYS_SKIP = new Set([
|
|
|
5
5
|
'node_modules', '.git', 'dist', 'build', '.codeledger',
|
|
6
6
|
]);
|
|
7
7
|
export function walkFiles(root, includeGlobs, excludeGlobs) {
|
|
8
|
-
// Parse root .gitignore patterns
|
|
9
|
-
|
|
10
|
-
const
|
|
8
|
+
// Parse root .gitignore and .codeledgerignore patterns, merge with config excludes.
|
|
9
|
+
// .codeledgerignore works like .gitignore: users specify paths to exclude from indexing.
|
|
10
|
+
const { excludes: gitExcludes, negations: gitNegations } = parseIgnoreFile(root, '.gitignore');
|
|
11
|
+
const { excludes: clExcludes, negations: clNegations } = parseIgnoreFile(root, '.codeledgerignore');
|
|
12
|
+
const allExcludes = [...excludeGlobs, ...gitExcludes, ...clExcludes];
|
|
13
|
+
const allNegations = [...gitNegations, ...clNegations];
|
|
11
14
|
const results = [];
|
|
12
|
-
walk(root, root, includeGlobs, allExcludes,
|
|
15
|
+
walk(root, root, includeGlobs, allExcludes, allNegations, results);
|
|
13
16
|
return results;
|
|
14
17
|
}
|
|
15
18
|
/**
|
|
16
|
-
* Parse
|
|
17
|
-
*
|
|
18
|
-
* prevent scanning vendored/generated directories that users have
|
|
19
|
-
* already told git to ignore.
|
|
19
|
+
* Parse an ignore file (.gitignore, .codeledgerignore) and return glob
|
|
20
|
+
* patterns compatible with our exclude matching.
|
|
20
21
|
*
|
|
21
22
|
* Negation patterns (lines starting with !) are returned separately so
|
|
22
23
|
* the walker can un-ignore files that match them.
|
|
23
24
|
*/
|
|
24
|
-
function
|
|
25
|
-
const
|
|
26
|
-
if (!existsSync(
|
|
25
|
+
function parseIgnoreFile(root, filename) {
|
|
26
|
+
const ignorePath = join(root, filename);
|
|
27
|
+
if (!existsSync(ignorePath))
|
|
27
28
|
return { excludes: [], negations: [] };
|
|
28
29
|
try {
|
|
29
|
-
const content = readFileSync(
|
|
30
|
+
const content = readFileSync(ignorePath, 'utf-8');
|
|
30
31
|
const excludes = [];
|
|
31
32
|
const negations = [];
|
|
32
33
|
for (const rawLine of content.split('\n')) {
|
package/dist/walk.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"walk.js","sourceRoot":"","sources":["../src/walk.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC1E,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAE3C,gEAAgE;AAChE,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC;IAC1B,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa;CACvD,CAAC,CAAC;AAEH,MAAM,UAAU,SAAS,CACvB,IAAY,EACZ,YAAsB,EACtB,YAAsB;IAEtB,
|
|
1
|
+
{"version":3,"file":"walk.js","sourceRoot":"","sources":["../src/walk.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@codeledger/repo",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.5.1",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Repository scanning and indexing for CodeLedger",
|
|
6
|
-
"license": "
|
|
6
|
+
"license": "MIT",
|
|
7
7
|
"repository": {
|
|
8
8
|
"type": "git",
|
|
9
9
|
"url": "https://github.com/codeledgerECF/codeledger-blackbox.git",
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
}
|
|
25
25
|
},
|
|
26
26
|
"dependencies": {
|
|
27
|
-
"@codeledger/types": "0.
|
|
27
|
+
"@codeledger/types": "0.5.1"
|
|
28
28
|
},
|
|
29
29
|
"devDependencies": {
|
|
30
30
|
"typescript": "^5.4.0"
|