@repo-map/core 0.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.
@@ -0,0 +1,449 @@
1
+ import path from "node:path";
2
+ import * as fs from "node:fs/promises";
3
+ const DEFAULT_MIN_KEYWORDS = 3;
4
+ const DEFAULT_MAX_KEYWORDS = 12;
5
+ const DEFAULT_MAX_CONTENT_BYTES = 512 * 1024;
6
+ const DEFAULT_MAX_CONTENT_FILES = 200;
7
+ const CONTENT_EXTENSIONS = new Set([
8
+ ".js",
9
+ ".jsx",
10
+ ".ts",
11
+ ".tsx",
12
+ ".mjs",
13
+ ".cjs",
14
+ ".mts",
15
+ ".cts",
16
+ ".py",
17
+ ".go"
18
+ ]);
19
+ const STOP_WORDS = new Set([
20
+ "a",
21
+ "an",
22
+ "and",
23
+ "the",
24
+ "or",
25
+ "of",
26
+ "to",
27
+ "in",
28
+ "for",
29
+ "on",
30
+ "by",
31
+ "with",
32
+ "at",
33
+ "from",
34
+ "as",
35
+ "is",
36
+ "are",
37
+ "be",
38
+ "src",
39
+ "lib",
40
+ "test",
41
+ "tests",
42
+ "spec",
43
+ "specs",
44
+ "util",
45
+ "utils",
46
+ "common",
47
+ "core",
48
+ "app",
49
+ "apps",
50
+ "service",
51
+ "services",
52
+ "module",
53
+ "modules",
54
+ "component",
55
+ "components",
56
+ "config",
57
+ "configs",
58
+ "type",
59
+ "types",
60
+ "interface",
61
+ "interfaces",
62
+ "model",
63
+ "models",
64
+ "data",
65
+ "db",
66
+ "database",
67
+ "api",
68
+ "router",
69
+ "routes",
70
+ "controller",
71
+ "controllers",
72
+ "handler",
73
+ "handlers",
74
+ "impl",
75
+ "impls",
76
+ "internal",
77
+ "pkg",
78
+ "bin",
79
+ "dist",
80
+ "build",
81
+ "tmp",
82
+ "temp",
83
+ "example",
84
+ "examples",
85
+ "doc",
86
+ "docs",
87
+ "readme",
88
+ "mock",
89
+ "fixture",
90
+ "fixtures",
91
+ "vendor",
92
+ "node",
93
+ "nodejs",
94
+ "python",
95
+ "go"
96
+ ]);
97
+ const compareNames = (left, right) => {
98
+ if (left === right)
99
+ return 0;
100
+ return left < right ? -1 : 1;
101
+ };
102
+ const normalizePosixPath = (value) => {
103
+ let normalized = value.replace(/\\/g, "/").trim();
104
+ if (normalized.startsWith("./"))
105
+ normalized = normalized.slice(2);
106
+ while (normalized.endsWith("/") && normalized.length > 1) {
107
+ normalized = normalized.slice(0, -1);
108
+ }
109
+ return normalized.length === 0 ? "." : normalized;
110
+ };
111
+ const reportError = (err, targetPath, onError) => {
112
+ if (!onError)
113
+ return;
114
+ const error = err;
115
+ if (error?.code === "ENOENT")
116
+ return;
117
+ onError(error, targetPath);
118
+ };
119
+ const resolveAbsPath = (repoRoot, filePath) => {
120
+ const segments = filePath === "." ? [] : filePath.split("/");
121
+ return path.resolve(repoRoot, ...segments);
122
+ };
123
+ const splitIdentifier = (value) => {
124
+ const sanitized = value
125
+ .replace(/[^a-zA-Z0-9]+/g, " ")
126
+ .replace(/([a-z0-9])([A-Z])/g, "$1 $2")
127
+ .replace(/([A-Z]+)([A-Z][a-z0-9]+)/g, "$1 $2");
128
+ return sanitized.split(/\s+/).filter(Boolean);
129
+ };
130
+ const tokenize = (value) => {
131
+ const lower = value.toLowerCase();
132
+ const parts = splitIdentifier(lower);
133
+ return parts.filter((token) => {
134
+ if (token.length < 2)
135
+ return false;
136
+ if (/^\d+$/.test(token))
137
+ return false;
138
+ return !STOP_WORDS.has(token);
139
+ });
140
+ };
141
+ const addTokens = (counts, tokens, weight) => {
142
+ for (const token of tokens) {
143
+ const current = counts.get(token) ?? 0;
144
+ counts.set(token, current + weight);
145
+ }
146
+ };
147
+ const addFromValue = (counts, value, weight) => {
148
+ if (!value)
149
+ return;
150
+ addTokens(counts, tokenize(value), weight);
151
+ };
152
+ const addFromIdentifiers = (counts, identifiers, weight) => {
153
+ for (const identifier of identifiers) {
154
+ addTokens(counts, tokenize(identifier), weight);
155
+ }
156
+ };
157
+ const addFromFileName = (counts, filePath) => {
158
+ const base = path.posix.basename(filePath);
159
+ const withoutExt = base.replace(/\.[^.]+$/, "");
160
+ const parts = withoutExt.split(".");
161
+ for (const part of parts) {
162
+ addFromValue(counts, part, 1);
163
+ }
164
+ };
165
+ const extractExports = (content) => {
166
+ const tokens = [];
167
+ const patterns = [
168
+ /\bexport\s+(?:async\s+)?function\s+([A-Za-z_$][\w$]*)/g,
169
+ /\bexport\s+(?:const|let|var|class|interface|type|enum)\s+([A-Za-z_$][\w$]*)/g,
170
+ /\bexport\s+default\s+(?:class|function)\s+([A-Za-z_$][\w$]*)/g
171
+ ];
172
+ for (const pattern of patterns) {
173
+ let match;
174
+ while ((match = pattern.exec(content))) {
175
+ tokens.push(match[1]);
176
+ }
177
+ }
178
+ const exportList = /\bexport\s*\{([^}]+)\}/g;
179
+ let listMatch;
180
+ while ((listMatch = exportList.exec(content))) {
181
+ const items = listMatch[1].split(",");
182
+ for (const item of items) {
183
+ const cleaned = item.trim();
184
+ if (!cleaned)
185
+ continue;
186
+ const parts = cleaned.split(/\s+as\s+/i);
187
+ const name = (parts[1] ?? parts[0]).trim();
188
+ if (name && name !== "default")
189
+ tokens.push(name);
190
+ }
191
+ }
192
+ const cjsExport = /\bexports\.([A-Za-z_$][\w$]*)/g;
193
+ let cjsMatch;
194
+ while ((cjsMatch = cjsExport.exec(content))) {
195
+ tokens.push(cjsMatch[1]);
196
+ }
197
+ const moduleExport = /\bmodule\.exports\s*=\s*\{([^}]+)\}/g;
198
+ let moduleMatch;
199
+ while ((moduleMatch = moduleExport.exec(content))) {
200
+ const items = moduleMatch[1].split(",");
201
+ for (const item of items) {
202
+ const name = item.split(":")[0]?.trim();
203
+ if (name)
204
+ tokens.push(name);
205
+ }
206
+ }
207
+ return tokens;
208
+ };
209
+ const extractInterfaces = (content) => {
210
+ const tokens = [];
211
+ const patterns = [
212
+ /\binterface\s+([A-Za-z_$][\w$]*)/g,
213
+ /\btype\s+([A-Za-z_$][\w$]*)\s*=/g,
214
+ /\btype\s+([A-Za-z_$][\w$]*)\s+struct\b/g,
215
+ /\btype\s+([A-Za-z_$][\w$]*)\s+interface\b/g
216
+ ];
217
+ for (const pattern of patterns) {
218
+ let match;
219
+ while ((match = pattern.exec(content))) {
220
+ tokens.push(match[1]);
221
+ }
222
+ }
223
+ return tokens;
224
+ };
225
+ const extractRoutes = (content) => {
226
+ const tokens = [];
227
+ const patterns = [
228
+ /\b(?:router|app|fastify|koa)\s*\.\s*(?:get|post|put|delete|patch|all|use)\s*\(\s*['"`]([^'"`]+)['"`]/g,
229
+ /\b(?:router|app|fastify|koa)\s*\.\s*route\s*\(\s*['"`]([^'"`]+)['"`]/g,
230
+ /@(?:Get|Post|Put|Delete|Patch|All)\s*\(\s*['"`]([^'"`]+)['"`]/g,
231
+ /\burl\s*:\s*['"`]([^'"`]+)['"`]/g,
232
+ /@.*route\s*\(\s*['"`]([^'"`]+)['"`]/g
233
+ ];
234
+ for (const pattern of patterns) {
235
+ let match;
236
+ while ((match = pattern.exec(content))) {
237
+ tokens.push(match[1]);
238
+ }
239
+ }
240
+ return tokens;
241
+ };
242
+ const extractPythonSymbols = (content) => {
243
+ const tokens = [];
244
+ const patterns = [
245
+ /\bdef\s+([A-Za-z_][\w]*)\s*\(/g,
246
+ /\bclass\s+([A-Za-z_][\w]*)\b/g
247
+ ];
248
+ for (const pattern of patterns) {
249
+ let match;
250
+ while ((match = pattern.exec(content))) {
251
+ tokens.push(match[1]);
252
+ }
253
+ }
254
+ return tokens;
255
+ };
256
+ const extractGoSymbols = (content) => {
257
+ const tokens = [];
258
+ const patterns = [
259
+ /\bfunc\s+([A-Za-z_][\w]*)\s*\(/g,
260
+ /\btype\s+([A-Za-z_][\w]*)\s+(?:struct|interface)\b/g,
261
+ /\bconst\s+([A-Za-z_][\w]*)\s*=/g,
262
+ /\bvar\s+([A-Za-z_][\w]*)\s*=/g
263
+ ];
264
+ for (const pattern of patterns) {
265
+ let match;
266
+ while ((match = pattern.exec(content))) {
267
+ tokens.push(match[1]);
268
+ }
269
+ }
270
+ return tokens;
271
+ };
272
+ const extractRouteTokens = (routePath) => {
273
+ const cleaned = routePath
274
+ .replace(/\/\/+/g, "/")
275
+ .replace(/[:*{}]/g, " ")
276
+ .replace(/[()]/g, " ");
277
+ const parts = cleaned.split("/").filter(Boolean);
278
+ const tokens = [];
279
+ for (const part of parts) {
280
+ tokens.push(...tokenize(part));
281
+ }
282
+ return tokens;
283
+ };
284
+ const resolveModuleRoot = (filePath, moduleRoots, cache) => {
285
+ let dir = path.posix.dirname(filePath);
286
+ if (dir === ".")
287
+ dir = ".";
288
+ const visited = [];
289
+ while (true) {
290
+ const cached = cache.get(dir);
291
+ if (cached) {
292
+ for (const entry of visited)
293
+ cache.set(entry, cached);
294
+ return cached;
295
+ }
296
+ visited.push(dir);
297
+ if (moduleRoots.has(dir)) {
298
+ for (const entry of visited)
299
+ cache.set(entry, dir);
300
+ return dir;
301
+ }
302
+ if (dir === ".") {
303
+ for (const entry of visited)
304
+ cache.set(entry, ".");
305
+ return ".";
306
+ }
307
+ dir = path.posix.dirname(dir);
308
+ }
309
+ };
310
+ const readFileContent = async (absPath, maxBytes, onError) => {
311
+ try {
312
+ const stats = await fs.stat(absPath);
313
+ if (stats.size > maxBytes)
314
+ return null;
315
+ let content = await fs.readFile(absPath, "utf8");
316
+ if (content.startsWith("\uFEFF")) {
317
+ content = content.slice(1);
318
+ }
319
+ return content;
320
+ }
321
+ catch (err) {
322
+ reportError(err, absPath, onError);
323
+ return null;
324
+ }
325
+ };
326
+ const finalizeKeywords = (counts, maxKeywords) => {
327
+ const sorted = Array.from(counts.entries())
328
+ .sort((a, b) => b[1] - a[1] || compareNames(a[0], b[0]))
329
+ .slice(0, maxKeywords)
330
+ .map(([token]) => token);
331
+ return sorted;
332
+ };
333
+ export async function extractModuleKeywords(options) {
334
+ const repoRoot = path.resolve(options.repoRoot);
335
+ const includeSet = options.includeModules
336
+ ? new Set(Array.from(options.includeModules, (value) => normalizePosixPath(value)))
337
+ : null;
338
+ const minKeywords = options.minKeywords ?? DEFAULT_MIN_KEYWORDS;
339
+ const maxKeywords = options.maxKeywords ?? DEFAULT_MAX_KEYWORDS;
340
+ const maxContentBytes = options.maxContentBytes ?? DEFAULT_MAX_CONTENT_BYTES;
341
+ const maxContentFiles = options.maxContentFiles ?? DEFAULT_MAX_CONTENT_FILES;
342
+ const includeFileNames = options.includeFileNames ?? true;
343
+ const includeExports = options.includeExports ?? true;
344
+ const includeRoutes = options.includeRoutes ?? true;
345
+ const includeInterfaces = options.includeInterfaces ?? true;
346
+ const onError = options.onError;
347
+ const files = Array.isArray(options.files)
348
+ ? options.files.map(normalizePosixPath)
349
+ : Array.from(options.files, normalizePosixPath);
350
+ const modulePaths = options.modules.map((module) => normalizePosixPath(module.path));
351
+ const moduleSet = new Set(modulePaths);
352
+ if (!moduleSet.has("."))
353
+ moduleSet.add(".");
354
+ const moduleFileMap = new Map();
355
+ const keywordMap = new Map();
356
+ const dirCache = new Map();
357
+ const ensureModule = (modulePath) => {
358
+ if (includeSet && !includeSet.has(modulePath))
359
+ return;
360
+ if (!moduleFileMap.has(modulePath))
361
+ moduleFileMap.set(modulePath, []);
362
+ if (!keywordMap.has(modulePath))
363
+ keywordMap.set(modulePath, new Map());
364
+ };
365
+ for (const filePath of files) {
366
+ if (!filePath || filePath === ".")
367
+ continue;
368
+ const moduleRoot = resolveModuleRoot(filePath, moduleSet, dirCache);
369
+ if (includeSet && !includeSet.has(moduleRoot))
370
+ continue;
371
+ ensureModule(moduleRoot);
372
+ moduleFileMap.get(moduleRoot)?.push(filePath);
373
+ if (includeFileNames) {
374
+ const counts = keywordMap.get(moduleRoot);
375
+ if (counts)
376
+ addFromFileName(counts, filePath);
377
+ }
378
+ }
379
+ const targetModules = includeSet
380
+ ? Array.from(includeSet)
381
+ : modulePaths;
382
+ for (const modulePath of targetModules) {
383
+ ensureModule(modulePath);
384
+ }
385
+ const results = [];
386
+ const sortedModulePaths = targetModules.slice().sort(compareNames);
387
+ for (const modulePath of sortedModulePaths) {
388
+ const counts = keywordMap.get(modulePath);
389
+ if (!counts)
390
+ continue;
391
+ const fileList = moduleFileMap.get(modulePath) ?? [];
392
+ fileList.sort(compareNames);
393
+ let processedFiles = 0;
394
+ if (includeExports ||
395
+ includeRoutes ||
396
+ includeInterfaces) {
397
+ for (const filePath of fileList) {
398
+ if (processedFiles >= maxContentFiles)
399
+ break;
400
+ if (counts.size >= maxKeywords)
401
+ break;
402
+ const ext = path.posix.extname(filePath);
403
+ if (!CONTENT_EXTENSIONS.has(ext))
404
+ continue;
405
+ const absPath = resolveAbsPath(repoRoot, filePath);
406
+ const content = await readFileContent(absPath, maxContentBytes, onError);
407
+ if (content === null)
408
+ continue;
409
+ if (ext === ".py") {
410
+ if (includeExports || includeInterfaces) {
411
+ addFromIdentifiers(counts, extractPythonSymbols(content), 2);
412
+ }
413
+ }
414
+ else if (ext === ".go") {
415
+ if (includeExports || includeInterfaces) {
416
+ addFromIdentifiers(counts, extractGoSymbols(content), 2);
417
+ }
418
+ }
419
+ else {
420
+ if (includeExports) {
421
+ addFromIdentifiers(counts, extractExports(content), 3);
422
+ }
423
+ if (includeInterfaces) {
424
+ addFromIdentifiers(counts, extractInterfaces(content), 2);
425
+ }
426
+ }
427
+ if (includeRoutes) {
428
+ const routes = extractRoutes(content);
429
+ for (const route of routes) {
430
+ addTokens(counts, extractRouteTokens(route), 4);
431
+ }
432
+ }
433
+ processedFiles += 1;
434
+ if (counts.size >= maxKeywords && counts.size >= minKeywords)
435
+ break;
436
+ }
437
+ }
438
+ if (counts.size < minKeywords) {
439
+ const fallback = tokenize(path.posix.basename(modulePath));
440
+ addTokens(counts, fallback, 1);
441
+ }
442
+ results.push({
443
+ path: modulePath,
444
+ keywords: finalizeKeywords(counts, maxKeywords)
445
+ });
446
+ }
447
+ return results;
448
+ }
449
+ //# sourceMappingURL=keyword-extractor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keyword-extractor.js","sourceRoot":"","sources":["../src/keyword-extractor.ts"],"names":[],"mappings":"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"}
package/dist/meta.d.ts ADDED
@@ -0,0 +1,16 @@
1
+ export type HashAlgorithm = "sha256" | "sha1";
2
+ export interface RepoMapMeta {
3
+ toolVersion: string;
4
+ repoRoot: string;
5
+ gitCommit: string | null;
6
+ generatedAt: string;
7
+ hashAlgorithm: HashAlgorithm;
8
+ }
9
+ export interface CreateMetaInput {
10
+ toolVersion: string;
11
+ repoRoot: string;
12
+ gitCommit?: string | null;
13
+ generatedAt?: string;
14
+ hashAlgorithm?: HashAlgorithm;
15
+ }
16
+ export declare function createMeta(input: CreateMetaInput): RepoMapMeta;
package/dist/meta.js ADDED
@@ -0,0 +1,10 @@
1
+ export function createMeta(input) {
2
+ return {
3
+ toolVersion: input.toolVersion,
4
+ repoRoot: input.repoRoot,
5
+ gitCommit: input.gitCommit ?? null,
6
+ generatedAt: input.generatedAt ?? new Date().toISOString(),
7
+ hashAlgorithm: input.hashAlgorithm ?? "sha256"
8
+ };
9
+ }
10
+ //# sourceMappingURL=meta.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"meta.js","sourceRoot":"","sources":["../src/meta.ts"],"names":[],"mappings":"AAkBA,MAAM,UAAU,UAAU,CAAC,KAAsB;IAC/C,OAAO;QACL,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,IAAI;QAClC,WAAW,EAAE,KAAK,CAAC,WAAW,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QAC1D,aAAa,EAAE,KAAK,CAAC,aAAa,IAAI,QAAQ;KAC/C,CAAC;AACJ,CAAC"}
@@ -0,0 +1,16 @@
1
+ export type ModuleLanguage = "node" | "go" | "python" | "mixed" | "unknown";
2
+ export interface ModuleInfo {
3
+ name: string;
4
+ path: string;
5
+ language: ModuleLanguage;
6
+ fileCount: number;
7
+ }
8
+ export interface ModuleDetectorOptions {
9
+ repoRoot: string;
10
+ files: Iterable<string>;
11
+ useWorkspaceConfig?: boolean;
12
+ workspacePatterns?: string[];
13
+ fallbackWorkspacePatterns?: string[];
14
+ onError?: (err: NodeJS.ErrnoException, path: string) => void;
15
+ }
16
+ export declare function detectModules(options: ModuleDetectorOptions): Promise<ModuleInfo[]>;