codesift-mcp 0.5.21 → 0.5.27
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 +9 -9
- package/dist/cli/commands.d.ts.map +1 -1
- package/dist/cli/commands.js +28 -0
- package/dist/cli/commands.js.map +1 -1
- package/dist/cli/help.js +1 -1
- package/dist/cli/help.js.map +1 -1
- package/dist/cli/hooks.d.ts +4 -0
- package/dist/cli/hooks.d.ts.map +1 -1
- package/dist/cli/hooks.js +15 -4
- package/dist/cli/hooks.js.map +1 -1
- package/dist/cli/journal-commands.d.ts +9 -0
- package/dist/cli/journal-commands.d.ts.map +1 -0
- package/dist/cli/journal-commands.js +160 -0
- package/dist/cli/journal-commands.js.map +1 -0
- package/dist/cli/wiki-commands.d.ts.map +1 -1
- package/dist/cli/wiki-commands.js +5 -0
- package/dist/cli/wiki-commands.js.map +1 -1
- package/dist/instructions.d.ts +1 -1
- package/dist/instructions.d.ts.map +1 -1
- package/dist/instructions.js +41 -47
- package/dist/instructions.js.map +1 -1
- package/dist/parser/extractors/_shared.d.ts +2 -0
- package/dist/parser/extractors/_shared.d.ts.map +1 -1
- package/dist/parser/extractors/_shared.js +4 -0
- package/dist/parser/extractors/_shared.js.map +1 -1
- package/dist/parser/extractors/typescript.d.ts.map +1 -1
- package/dist/parser/extractors/typescript.js +606 -31
- package/dist/parser/extractors/typescript.js.map +1 -1
- package/dist/parser/parse-worker.d.ts +2 -0
- package/dist/parser/parse-worker.d.ts.map +1 -0
- package/dist/parser/parse-worker.js +47 -0
- package/dist/parser/parse-worker.js.map +1 -0
- package/dist/parser/parser-manager.d.ts +10 -1
- package/dist/parser/parser-manager.d.ts.map +1 -1
- package/dist/parser/parser-manager.js +40 -2
- package/dist/parser/parser-manager.js.map +1 -1
- package/dist/parser/parser-pool.d.ts +31 -0
- package/dist/parser/parser-pool.d.ts.map +1 -0
- package/dist/parser/parser-pool.js +211 -0
- package/dist/parser/parser-pool.js.map +1 -0
- package/dist/register-tools.d.ts.map +1 -1
- package/dist/register-tools.js +394 -35
- package/dist/register-tools.js.map +1 -1
- package/dist/retrieval/codebase-retrieval.d.ts.map +1 -1
- package/dist/retrieval/codebase-retrieval.js +9 -1
- package/dist/retrieval/codebase-retrieval.js.map +1 -1
- package/dist/search/chunker.d.ts +1 -0
- package/dist/search/chunker.d.ts.map +1 -1
- package/dist/search/chunker.js +8 -1
- package/dist/search/chunker.js.map +1 -1
- package/dist/server-helpers.d.ts +27 -0
- package/dist/server-helpers.d.ts.map +1 -1
- package/dist/server-helpers.js +90 -9
- package/dist/server-helpers.js.map +1 -1
- package/dist/server.js +31 -0
- package/dist/server.js.map +1 -1
- package/dist/storage/index-store.d.ts +41 -4
- package/dist/storage/index-store.d.ts.map +1 -1
- package/dist/storage/index-store.js +89 -6
- package/dist/storage/index-store.js.map +1 -1
- package/dist/storage/watcher.d.ts +33 -6
- package/dist/storage/watcher.d.ts.map +1 -1
- package/dist/storage/watcher.js +73 -34
- package/dist/storage/watcher.js.map +1 -1
- package/dist/storage/workspace-resolver.d.ts +15 -0
- package/dist/storage/workspace-resolver.d.ts.map +1 -0
- package/dist/storage/workspace-resolver.js +130 -0
- package/dist/storage/workspace-resolver.js.map +1 -0
- package/dist/tools/_helpers.d.ts +37 -0
- package/dist/tools/_helpers.d.ts.map +1 -0
- package/dist/tools/_helpers.js +31 -0
- package/dist/tools/_helpers.js.map +1 -0
- package/dist/tools/constant-resolution-tools.d.ts +8 -0
- package/dist/tools/constant-resolution-tools.d.ts.map +1 -0
- package/dist/tools/constant-resolution-tools.js +68 -0
- package/dist/tools/constant-resolution-tools.js.map +1 -0
- package/dist/tools/graph-tools.d.ts +27 -5
- package/dist/tools/graph-tools.d.ts.map +1 -1
- package/dist/tools/graph-tools.js +141 -18
- package/dist/tools/graph-tools.js.map +1 -1
- package/dist/tools/hotspot-tools.d.ts +6 -0
- package/dist/tools/hotspot-tools.d.ts.map +1 -1
- package/dist/tools/hotspot-tools.js +48 -8
- package/dist/tools/hotspot-tools.js.map +1 -1
- package/dist/tools/impact-tools.d.ts.map +1 -1
- package/dist/tools/impact-tools.js +9 -2
- package/dist/tools/impact-tools.js.map +1 -1
- package/dist/tools/index-tools.d.ts +15 -1
- package/dist/tools/index-tools.d.ts.map +1 -1
- package/dist/tools/index-tools.js +161 -16
- package/dist/tools/index-tools.js.map +1 -1
- package/dist/tools/journal-generator-helpers.d.ts +55 -0
- package/dist/tools/journal-generator-helpers.d.ts.map +1 -0
- package/dist/tools/journal-generator-helpers.js +250 -0
- package/dist/tools/journal-generator-helpers.js.map +1 -0
- package/dist/tools/journal-generator.d.ts +48 -0
- package/dist/tools/journal-generator.d.ts.map +1 -0
- package/dist/tools/journal-generator.js +204 -0
- package/dist/tools/journal-generator.js.map +1 -0
- package/dist/tools/journal-git-client.d.ts +20 -0
- package/dist/tools/journal-git-client.d.ts.map +1 -0
- package/dist/tools/journal-git-client.js +57 -0
- package/dist/tools/journal-git-client.js.map +1 -0
- package/dist/tools/journal-llm-client.d.ts +57 -0
- package/dist/tools/journal-llm-client.d.ts.map +1 -0
- package/dist/tools/journal-llm-client.js +175 -0
- package/dist/tools/journal-llm-client.js.map +1 -0
- package/dist/tools/journal-migrator.d.ts +22 -0
- package/dist/tools/journal-migrator.d.ts.map +1 -0
- package/dist/tools/journal-migrator.js +183 -0
- package/dist/tools/journal-migrator.js.map +1 -0
- package/dist/tools/journal-phase-detector.d.ts +26 -0
- package/dist/tools/journal-phase-detector.d.ts.map +1 -0
- package/dist/tools/journal-phase-detector.js +126 -0
- package/dist/tools/journal-phase-detector.js.map +1 -0
- package/dist/tools/journal-sentinel.d.ts +15 -0
- package/dist/tools/journal-sentinel.d.ts.map +1 -0
- package/dist/tools/journal-sentinel.js +110 -0
- package/dist/tools/journal-sentinel.js.map +1 -0
- package/dist/tools/journal-templates.d.ts +28 -0
- package/dist/tools/journal-templates.d.ts.map +1 -0
- package/dist/tools/journal-templates.js +93 -0
- package/dist/tools/journal-templates.js.map +1 -0
- package/dist/tools/pattern-tools.d.ts +2 -0
- package/dist/tools/pattern-tools.d.ts.map +1 -1
- package/dist/tools/pattern-tools.js +73 -0
- package/dist/tools/pattern-tools.js.map +1 -1
- package/dist/tools/perf-tools.d.ts.map +1 -1
- package/dist/tools/perf-tools.js +6 -0
- package/dist/tools/perf-tools.js.map +1 -1
- package/dist/tools/plan-turn-tools.d.ts.map +1 -1
- package/dist/tools/plan-turn-tools.js +38 -2
- package/dist/tools/plan-turn-tools.js.map +1 -1
- package/dist/tools/project-tools.d.ts +6 -0
- package/dist/tools/project-tools.d.ts.map +1 -1
- package/dist/tools/project-tools.js +65 -25
- package/dist/tools/project-tools.js.map +1 -1
- package/dist/tools/python-constants-tools.d.ts +6 -0
- package/dist/tools/python-constants-tools.d.ts.map +1 -1
- package/dist/tools/python-constants-tools.js.map +1 -1
- package/dist/tools/react-tools.d.ts +44 -1
- package/dist/tools/react-tools.d.ts.map +1 -1
- package/dist/tools/react-tools.js +142 -9
- package/dist/tools/react-tools.js.map +1 -1
- package/dist/tools/search-tools.d.ts.map +1 -1
- package/dist/tools/search-tools.js +21 -2
- package/dist/tools/search-tools.js.map +1 -1
- package/dist/tools/status-tools.d.ts +10 -0
- package/dist/tools/status-tools.d.ts.map +1 -1
- package/dist/tools/status-tools.js +53 -2
- package/dist/tools/status-tools.js.map +1 -1
- package/dist/tools/symbol-tools.d.ts +13 -0
- package/dist/tools/symbol-tools.d.ts.map +1 -1
- package/dist/tools/symbol-tools.js +38 -0
- package/dist/tools/symbol-tools.js.map +1 -1
- package/dist/tools/typescript-constants-tools.d.ts +6 -0
- package/dist/tools/typescript-constants-tools.d.ts.map +1 -0
- package/dist/tools/typescript-constants-tools.js +687 -0
- package/dist/tools/typescript-constants-tools.js.map +1 -0
- package/dist/tools/wiki-hub-ranker.d.ts +36 -0
- package/dist/tools/wiki-hub-ranker.d.ts.map +1 -0
- package/dist/tools/wiki-hub-ranker.js +72 -0
- package/dist/tools/wiki-hub-ranker.js.map +1 -0
- package/dist/tools/wiki-lint.d.ts +7 -2
- package/dist/tools/wiki-lint.d.ts.map +1 -1
- package/dist/tools/wiki-lint.js +73 -1
- package/dist/tools/wiki-lint.js.map +1 -1
- package/dist/tools/wiki-manifest.d.ts +129 -21
- package/dist/tools/wiki-manifest.d.ts.map +1 -1
- package/dist/tools/wiki-manifest.js +16 -9
- package/dist/tools/wiki-manifest.js.map +1 -1
- package/dist/tools/wiki-module-builder.d.ts +42 -0
- package/dist/tools/wiki-module-builder.d.ts.map +1 -0
- package/dist/tools/wiki-module-builder.js +449 -0
- package/dist/tools/wiki-module-builder.js.map +1 -0
- package/dist/tools/wiki-overview-sources.d.ts +26 -0
- package/dist/tools/wiki-overview-sources.d.ts.map +1 -0
- package/dist/tools/wiki-overview-sources.js +128 -0
- package/dist/tools/wiki-overview-sources.js.map +1 -0
- package/dist/tools/wiki-page-generators.d.ts +19 -3
- package/dist/tools/wiki-page-generators.d.ts.map +1 -1
- package/dist/tools/wiki-page-generators.js +156 -22
- package/dist/tools/wiki-page-generators.js.map +1 -1
- package/dist/tools/wiki-tools.d.ts +20 -0
- package/dist/tools/wiki-tools.d.ts.map +1 -1
- package/dist/tools/wiki-tools.js +181 -29
- package/dist/tools/wiki-tools.js.map +1 -1
- package/dist/tools/workspace-scope-helper.d.ts +21 -0
- package/dist/tools/workspace-scope-helper.d.ts.map +1 -0
- package/dist/tools/workspace-scope-helper.js +50 -0
- package/dist/tools/workspace-scope-helper.js.map +1 -0
- package/dist/tools/workspace-tools.d.ts +74 -0
- package/dist/tools/workspace-tools.d.ts.map +1 -0
- package/dist/tools/workspace-tools.js +366 -0
- package/dist/tools/workspace-tools.js.map +1 -0
- package/dist/types.d.ts +65 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/import-graph.d.ts +27 -0
- package/dist/utils/import-graph.d.ts.map +1 -1
- package/dist/utils/import-graph.js +331 -8
- package/dist/utils/import-graph.js.map +1 -1
- package/dist/utils/ts-imports.d.ts +30 -0
- package/dist/utils/ts-imports.d.ts.map +1 -0
- package/dist/utils/ts-imports.js +168 -0
- package/dist/utils/ts-imports.js.map +1 -0
- package/dist/utils/tsconfig-paths.d.ts +59 -0
- package/dist/utils/tsconfig-paths.d.ts.map +1 -0
- package/dist/utils/tsconfig-paths.js +176 -0
- package/dist/utils/tsconfig-paths.js.map +1 -0
- package/dist/utils/walk.d.ts.map +1 -1
- package/dist/utils/walk.js +1 -0
- package/dist/utils/walk.js.map +1 -1
- package/package.json +13 -3
- package/rules/codesift.md +19 -2
- package/rules/codesift.mdc +2 -2
- package/rules/codex.md +13 -2
- package/rules/gemini.md +13 -2
|
@@ -0,0 +1,449 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Wiki v2 module builder — assembles ProjectOverview, ModuleMetadata[], and
|
|
3
|
+
* the v2 WikiManifest writer. Framework-aware description cascade lives in
|
|
4
|
+
* wiki-cascade.ts; raw parsers and key-dep selector in wiki-overview-sources.ts.
|
|
5
|
+
*/
|
|
6
|
+
import { readFileSync } from "node:fs";
|
|
7
|
+
import { basename, join } from "node:path";
|
|
8
|
+
import { isShallowClone, parseGoMod, parsePyprojectToml, parseCargoToml, selectKeyDependencies, } from "./wiki-overview-sources.js";
|
|
9
|
+
import { buildUniqueSlugs, buildFileToCommunityMap, } from "./wiki-manifest.js";
|
|
10
|
+
/**
|
|
11
|
+
* Build a ProjectOverview from the analyzeProject result and the code index.
|
|
12
|
+
* Emits `_degraded` as a side-channel when git history is shallow/missing; the
|
|
13
|
+
* orchestrator strips it and pushes to `degraded_reasons`.
|
|
14
|
+
*/
|
|
15
|
+
export function buildProjectOverview(projectResult, codeIndex) {
|
|
16
|
+
const ident = projectResult.identity;
|
|
17
|
+
const stack = projectResult.stack;
|
|
18
|
+
const name = ident?.project_name ?? basename(codeIndex.root);
|
|
19
|
+
const project_type = ident?.project_type ?? "single";
|
|
20
|
+
const workspaces = stack?.monorepo?.workspaces ?? [];
|
|
21
|
+
const scripts = readScripts(codeIndex.root);
|
|
22
|
+
const fallbackName = nonJsFallbackName(codeIndex.root);
|
|
23
|
+
const dependencies = selectKeyDependencies(projectResult);
|
|
24
|
+
mergeNonJsDeps(dependencies, codeIndex.root);
|
|
25
|
+
const gh = projectResult.git_health ?? null;
|
|
26
|
+
const shallow = isShallowClone(codeIndex.root);
|
|
27
|
+
const totalCommits = shallow || gh === null ? null : (gh?.total_commits ?? null);
|
|
28
|
+
const contributors = shallow || gh === null ? null : (gh?.contributors ?? null);
|
|
29
|
+
const overview = {
|
|
30
|
+
name: name ?? fallbackName ?? "unknown",
|
|
31
|
+
git_remote: ident?.git_remote ?? null,
|
|
32
|
+
project_type,
|
|
33
|
+
stack: {
|
|
34
|
+
language: stack?.language ?? inferLanguage(codeIndex.root) ?? "unknown",
|
|
35
|
+
language_version: stack?.language_version ?? null,
|
|
36
|
+
framework: stack?.framework ?? null,
|
|
37
|
+
framework_version: stack?.framework_version ?? null,
|
|
38
|
+
test_runner: stack?.test_runner ?? null,
|
|
39
|
+
package_manager: stack?.package_manager ?? null,
|
|
40
|
+
build_tool: stack?.build_tool ?? null,
|
|
41
|
+
},
|
|
42
|
+
scripts,
|
|
43
|
+
entry_points: projectResult.dependency_graph?.entry_points ?? [],
|
|
44
|
+
workspaces,
|
|
45
|
+
dependencies,
|
|
46
|
+
known_gotchas: (projectResult.known_gotchas?.auto_detected ?? []).map((g) => ({
|
|
47
|
+
gotcha: g.gotcha,
|
|
48
|
+
severity: g.severity,
|
|
49
|
+
})),
|
|
50
|
+
stats: {
|
|
51
|
+
total_files: codeIndex.file_count,
|
|
52
|
+
total_commits: totalCommits,
|
|
53
|
+
contributors,
|
|
54
|
+
},
|
|
55
|
+
};
|
|
56
|
+
if (shallow || gh === null) {
|
|
57
|
+
overview._degraded = "shallow_clone_or_insufficient_history";
|
|
58
|
+
}
|
|
59
|
+
return overview;
|
|
60
|
+
}
|
|
61
|
+
function readScripts(root) {
|
|
62
|
+
try {
|
|
63
|
+
const raw = readFileSync(join(root, "package.json"), "utf-8");
|
|
64
|
+
const pkg = JSON.parse(raw);
|
|
65
|
+
return pkg.scripts ?? {};
|
|
66
|
+
}
|
|
67
|
+
catch {
|
|
68
|
+
return {};
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
function nonJsFallbackName(root) {
|
|
72
|
+
try {
|
|
73
|
+
const goMod = readFileSync(join(root, "go.mod"), "utf-8");
|
|
74
|
+
const p = parseGoMod(goMod);
|
|
75
|
+
if (p.name)
|
|
76
|
+
return basename(p.name);
|
|
77
|
+
}
|
|
78
|
+
catch { /* no go.mod */ }
|
|
79
|
+
try {
|
|
80
|
+
const py = readFileSync(join(root, "pyproject.toml"), "utf-8");
|
|
81
|
+
const p = parsePyprojectToml(py);
|
|
82
|
+
if (p.name)
|
|
83
|
+
return p.name;
|
|
84
|
+
}
|
|
85
|
+
catch { /* no pyproject */ }
|
|
86
|
+
try {
|
|
87
|
+
const cargo = readFileSync(join(root, "Cargo.toml"), "utf-8");
|
|
88
|
+
const p = parseCargoToml(cargo);
|
|
89
|
+
if (p.name)
|
|
90
|
+
return p.name;
|
|
91
|
+
}
|
|
92
|
+
catch { /* no cargo */ }
|
|
93
|
+
return null;
|
|
94
|
+
}
|
|
95
|
+
function mergeNonJsDeps(summary, root) {
|
|
96
|
+
if (summary.key.length > 0)
|
|
97
|
+
return;
|
|
98
|
+
try {
|
|
99
|
+
const py = readFileSync(join(root, "pyproject.toml"), "utf-8");
|
|
100
|
+
const p = parsePyprojectToml(py);
|
|
101
|
+
summary.prod_total = Math.max(summary.prod_total, p.deps.length);
|
|
102
|
+
for (const name of p.deps.slice(0, 15)) {
|
|
103
|
+
summary.key.push({ name, version: "", kind: "prod" });
|
|
104
|
+
}
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
107
|
+
catch { /* skip */ }
|
|
108
|
+
try {
|
|
109
|
+
const goMod = readFileSync(join(root, "go.mod"), "utf-8");
|
|
110
|
+
const p = parseGoMod(goMod);
|
|
111
|
+
summary.prod_total = Math.max(summary.prod_total, p.deps.length);
|
|
112
|
+
for (const name of p.deps.slice(0, 15)) {
|
|
113
|
+
summary.key.push({ name, version: "", kind: "prod" });
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
catch { /* skip */ }
|
|
117
|
+
}
|
|
118
|
+
function inferLanguage(root) {
|
|
119
|
+
try {
|
|
120
|
+
readFileSync(join(root, "go.mod"), "utf-8");
|
|
121
|
+
return "Go";
|
|
122
|
+
}
|
|
123
|
+
catch { }
|
|
124
|
+
try {
|
|
125
|
+
readFileSync(join(root, "pyproject.toml"), "utf-8");
|
|
126
|
+
return "Python";
|
|
127
|
+
}
|
|
128
|
+
catch { }
|
|
129
|
+
try {
|
|
130
|
+
readFileSync(join(root, "Cargo.toml"), "utf-8");
|
|
131
|
+
return "Rust";
|
|
132
|
+
}
|
|
133
|
+
catch { }
|
|
134
|
+
return null;
|
|
135
|
+
}
|
|
136
|
+
// ---------------------------------------------------------------------------
|
|
137
|
+
// ModuleMetadata assembly (cascade + per-community data)
|
|
138
|
+
// ---------------------------------------------------------------------------
|
|
139
|
+
const TEST_FILE_RE = /\.test\.(ts|js|py|go)$|\.spec\.(ts|js)$|__tests__\//;
|
|
140
|
+
export function buildModuleMetadata(communities, projectResult, codeIndex, importEdges, fileHotspots, rankedHubs) {
|
|
141
|
+
void rankedHubs;
|
|
142
|
+
const slugs = buildUniqueSlugs(communities);
|
|
143
|
+
const fileToCommunity = buildFileToCommunityMap(communities, slugs);
|
|
144
|
+
const hotspotFiles = new Set(fileHotspots.slice(0, 20).map((h) => h.file));
|
|
145
|
+
const symbolsByFile = indexSymbolsByFile(codeIndex.symbols);
|
|
146
|
+
const out = [];
|
|
147
|
+
for (const c of communities) {
|
|
148
|
+
const slug = slugs.get(c.name);
|
|
149
|
+
const isTestCommunity = c.files.length > 0 && c.files.every((f) => TEST_FILE_RE.test(f));
|
|
150
|
+
const microModule = c.files.length < 4;
|
|
151
|
+
const description = describeCommunity(c, projectResult, isTestCommunity, importEdges, fileToCommunity);
|
|
152
|
+
const role = isTestCommunity ? "tests"
|
|
153
|
+
: microModule ? "micro-module"
|
|
154
|
+
: inferRole(c, projectResult);
|
|
155
|
+
const { key_exports, approximate } = collectKeyExports(c, symbolsByFile, importEdges);
|
|
156
|
+
const has_hotspot = c.files.some((f) => hotspotFiles.has(f));
|
|
157
|
+
const { depends_on, depended_by } = computeCommunityEdges(c, importEdges, fileToCommunity, slug);
|
|
158
|
+
const module = {
|
|
159
|
+
slug,
|
|
160
|
+
name: c.name,
|
|
161
|
+
description,
|
|
162
|
+
role,
|
|
163
|
+
files: c.files.length,
|
|
164
|
+
cohesion: c.cohesion ?? 0,
|
|
165
|
+
key_exports,
|
|
166
|
+
depends_on,
|
|
167
|
+
depended_by,
|
|
168
|
+
has_hotspot,
|
|
169
|
+
};
|
|
170
|
+
if (approximate)
|
|
171
|
+
module.key_exports_approximate = true;
|
|
172
|
+
out.push(module);
|
|
173
|
+
}
|
|
174
|
+
return out;
|
|
175
|
+
}
|
|
176
|
+
function indexSymbolsByFile(symbols) {
|
|
177
|
+
const map = new Map();
|
|
178
|
+
for (const s of symbols) {
|
|
179
|
+
const arr = map.get(s.file);
|
|
180
|
+
if (arr)
|
|
181
|
+
arr.push(s);
|
|
182
|
+
else
|
|
183
|
+
map.set(s.file, [s]);
|
|
184
|
+
}
|
|
185
|
+
return map;
|
|
186
|
+
}
|
|
187
|
+
function collectKeyExports(c, symbolsByFile, importEdges) {
|
|
188
|
+
const candidates = [];
|
|
189
|
+
for (const f of c.files) {
|
|
190
|
+
for (const s of symbolsByFile.get(f) ?? []) {
|
|
191
|
+
if (s.is_exported === true)
|
|
192
|
+
candidates.push(s);
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
if (candidates.length > 0) {
|
|
196
|
+
const byFanIn = rankByExternalImport(candidates, importEdges, c.files);
|
|
197
|
+
return {
|
|
198
|
+
key_exports: byFanIn.slice(0, 5).map(toKeyExport),
|
|
199
|
+
approximate: false,
|
|
200
|
+
};
|
|
201
|
+
}
|
|
202
|
+
// Fallback: community files imported from outside → surface first symbol per file
|
|
203
|
+
const externallyImported = new Set();
|
|
204
|
+
const fileSet = new Set(c.files);
|
|
205
|
+
for (const e of importEdges) {
|
|
206
|
+
if (fileSet.has(e.to) && !fileSet.has(e.from))
|
|
207
|
+
externallyImported.add(e.to);
|
|
208
|
+
}
|
|
209
|
+
const approx = [];
|
|
210
|
+
for (const f of externallyImported) {
|
|
211
|
+
const syms = symbolsByFile.get(f) ?? [];
|
|
212
|
+
const first = syms.find((s) => EXPORT_KINDS.has(s.kind));
|
|
213
|
+
if (first)
|
|
214
|
+
approx.push(first);
|
|
215
|
+
}
|
|
216
|
+
return {
|
|
217
|
+
key_exports: approx.slice(0, 5).map(toKeyExport),
|
|
218
|
+
approximate: approx.length > 0,
|
|
219
|
+
};
|
|
220
|
+
}
|
|
221
|
+
const EXPORT_KINDS = new Set(["function", "class", "interface", "type", "component", "hook"]);
|
|
222
|
+
function toKeyExport(s) {
|
|
223
|
+
const kind = EXPORT_KINDS.has(s.kind) ? s.kind : "function";
|
|
224
|
+
const out = { name: s.name, kind, file: s.file };
|
|
225
|
+
if (s.signature)
|
|
226
|
+
out.signature = s.signature;
|
|
227
|
+
return out;
|
|
228
|
+
}
|
|
229
|
+
function rankByExternalImport(syms, edges, communityFiles) {
|
|
230
|
+
const fileSet = new Set(communityFiles);
|
|
231
|
+
const externalImporters = new Map();
|
|
232
|
+
for (const e of edges) {
|
|
233
|
+
if (fileSet.has(e.to) && !fileSet.has(e.from)) {
|
|
234
|
+
externalImporters.set(e.to, (externalImporters.get(e.to) ?? 0) + 1);
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
return [...syms].sort((a, b) => (externalImporters.get(b.file) ?? 0) - (externalImporters.get(a.file) ?? 0));
|
|
238
|
+
}
|
|
239
|
+
function computeCommunityEdges(c, edges, fileToCommunity, ownSlug) {
|
|
240
|
+
const fileSet = new Set(c.files);
|
|
241
|
+
const dependsOn = new Set();
|
|
242
|
+
const dependedBy = new Set();
|
|
243
|
+
for (const e of edges) {
|
|
244
|
+
const fromSlug = fileToCommunity[e.from];
|
|
245
|
+
const toSlug = fileToCommunity[e.to];
|
|
246
|
+
if (fromSlug === ownSlug && toSlug && toSlug !== ownSlug)
|
|
247
|
+
dependsOn.add(toSlug);
|
|
248
|
+
if (toSlug === ownSlug && fromSlug && fromSlug !== ownSlug)
|
|
249
|
+
dependedBy.add(fromSlug);
|
|
250
|
+
// fileSet referenced to preserve intent
|
|
251
|
+
void fileSet;
|
|
252
|
+
}
|
|
253
|
+
return {
|
|
254
|
+
depends_on: [...dependsOn].sort(),
|
|
255
|
+
depended_by: [...dependedBy].sort(),
|
|
256
|
+
};
|
|
257
|
+
}
|
|
258
|
+
function inferRole(c, projectResult) {
|
|
259
|
+
const dir = commonDirPrefix(c.files);
|
|
260
|
+
if (/routes|controller|handlers?/.test(dir))
|
|
261
|
+
return "framework-routes";
|
|
262
|
+
if (/components?|ui|views/.test(dir))
|
|
263
|
+
return "framework-components";
|
|
264
|
+
if (/utils?|helpers?|lib/.test(dir))
|
|
265
|
+
return "utilities";
|
|
266
|
+
if (/parser|extract/.test(dir))
|
|
267
|
+
return "parsers";
|
|
268
|
+
if (/storage|db|repository/.test(dir))
|
|
269
|
+
return "storage";
|
|
270
|
+
if (/search|query|index/.test(dir))
|
|
271
|
+
return "search";
|
|
272
|
+
if (/cli|bin/.test(dir))
|
|
273
|
+
return "cli";
|
|
274
|
+
if (projectResult.stack?.framework)
|
|
275
|
+
return "framework-tools";
|
|
276
|
+
return "core-library";
|
|
277
|
+
}
|
|
278
|
+
function commonDirPrefix(files) {
|
|
279
|
+
if (files.length === 0)
|
|
280
|
+
return "";
|
|
281
|
+
const parts = files[0].split("/");
|
|
282
|
+
for (const f of files.slice(1)) {
|
|
283
|
+
const fp = f.split("/");
|
|
284
|
+
while (parts.length > 0 && parts[0] !== fp[0])
|
|
285
|
+
parts.shift();
|
|
286
|
+
if (parts.length === 0)
|
|
287
|
+
break;
|
|
288
|
+
}
|
|
289
|
+
return parts.join("/");
|
|
290
|
+
}
|
|
291
|
+
// Description cascade: framework → dep-lookup → file-pattern/keyword
|
|
292
|
+
function describeCommunity(c, projectResult, isTestCommunity, importEdges, fileToCommunity) {
|
|
293
|
+
if (isTestCommunity)
|
|
294
|
+
return describeTestCommunity(c, importEdges, fileToCommunity);
|
|
295
|
+
try {
|
|
296
|
+
const lvl1 = describeViaFramework(c, projectResult);
|
|
297
|
+
if (lvl1)
|
|
298
|
+
return lvl1;
|
|
299
|
+
}
|
|
300
|
+
catch { /* advance */ }
|
|
301
|
+
try {
|
|
302
|
+
const lvl2 = describeViaDependencyLookup(c, projectResult);
|
|
303
|
+
if (lvl2)
|
|
304
|
+
return lvl2;
|
|
305
|
+
}
|
|
306
|
+
catch { /* advance */ }
|
|
307
|
+
return describeViaFilePatterns(c);
|
|
308
|
+
}
|
|
309
|
+
function describeTestCommunity(c, importEdges, fileToCommunity) {
|
|
310
|
+
const fileSet = new Set(c.files);
|
|
311
|
+
const outgoing = new Map();
|
|
312
|
+
for (const e of importEdges) {
|
|
313
|
+
if (!fileSet.has(e.from))
|
|
314
|
+
continue;
|
|
315
|
+
const target = fileToCommunity[e.to];
|
|
316
|
+
if (target)
|
|
317
|
+
outgoing.set(target, (outgoing.get(target) ?? 0) + 1);
|
|
318
|
+
}
|
|
319
|
+
const top = [...outgoing.entries()].sort((a, b) => b[1] - a[1])[0];
|
|
320
|
+
const target = top?.[0] ?? "this project";
|
|
321
|
+
return `Test suite for ${target}`;
|
|
322
|
+
}
|
|
323
|
+
function describeViaFramework(c, p) {
|
|
324
|
+
const dir = commonDirPrefix(c.files);
|
|
325
|
+
const fw = p.stack?.framework;
|
|
326
|
+
if (!fw)
|
|
327
|
+
return null;
|
|
328
|
+
if (/controller/.test(dir) && fw.toLowerCase().includes("nest")) {
|
|
329
|
+
return `NestJS controllers — ${c.files.length} files handling HTTP routes.`;
|
|
330
|
+
}
|
|
331
|
+
if (/pages|app/.test(dir) && fw.toLowerCase().includes("next")) {
|
|
332
|
+
return `Next.js routes and layouts — ${c.files.length} files.`;
|
|
333
|
+
}
|
|
334
|
+
if (/routes|handlers?/.test(dir) && fw.toLowerCase().includes("hono")) {
|
|
335
|
+
return `Hono route handlers — ${c.files.length} files.`;
|
|
336
|
+
}
|
|
337
|
+
if (/components?/.test(dir) && fw.toLowerCase().includes("react")) {
|
|
338
|
+
return `React components — ${c.files.length} files.`;
|
|
339
|
+
}
|
|
340
|
+
return null;
|
|
341
|
+
}
|
|
342
|
+
const DEP_ROLES = {
|
|
343
|
+
prisma: "Prisma data access", "@prisma/client": "Prisma client integration",
|
|
344
|
+
pg: "Postgres data access", mongoose: "MongoDB data access",
|
|
345
|
+
"drizzle-orm": "Drizzle ORM data access",
|
|
346
|
+
redis: "Redis integration", ioredis: "Redis integration",
|
|
347
|
+
zod: "Zod validation schemas",
|
|
348
|
+
"@tanstack/react-query": "Data fetching via TanStack Query",
|
|
349
|
+
"graphql": "GraphQL integration",
|
|
350
|
+
};
|
|
351
|
+
function describeViaDependencyLookup(c, p) {
|
|
352
|
+
const kv = p.dependency_health?.key_versions ?? {};
|
|
353
|
+
for (const pkg of Object.keys(kv)) {
|
|
354
|
+
if (pkg in DEP_ROLES && pkg_keywordsInFiles(pkg, c.files)) {
|
|
355
|
+
return `${DEP_ROLES[pkg]} — ${c.files.length} files.`;
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
return null;
|
|
359
|
+
}
|
|
360
|
+
function pkg_keywordsInFiles(pkg, files) {
|
|
361
|
+
const base = pkg.replace(/^@/, "").split("/")[0].toLowerCase();
|
|
362
|
+
return files.some((f) => f.toLowerCase().includes(base));
|
|
363
|
+
}
|
|
364
|
+
function describeViaFilePatterns(c) {
|
|
365
|
+
const dir = commonDirPrefix(c.files);
|
|
366
|
+
if (/utils?|helpers?/.test(dir))
|
|
367
|
+
return `Utilities — ${c.files.length} helper files under ${dir || "this module"}.`;
|
|
368
|
+
if (/parser|extractor/.test(dir))
|
|
369
|
+
return `Parsers and extractors — ${c.files.length} files under ${dir}.`;
|
|
370
|
+
if (/storage/.test(dir))
|
|
371
|
+
return `Storage layer — ${c.files.length} files.`;
|
|
372
|
+
if (/tools?/.test(dir))
|
|
373
|
+
return `Tooling — ${c.files.length} files under ${dir}.`;
|
|
374
|
+
return `Module of ${c.files.length} files${dir ? ` under ${dir}` : ""}.`;
|
|
375
|
+
}
|
|
376
|
+
export function buildWikiManifestV2(options) {
|
|
377
|
+
const { index_hash, git_commit, pages, communities, project, modules, oldManifest, degradedReasons, modules_truncated, truncation_reason, } = options;
|
|
378
|
+
const file_to_community = buildFileToCommunityMap(communities);
|
|
379
|
+
const token_estimates = {};
|
|
380
|
+
const CHARS_PER_TOKEN = 4;
|
|
381
|
+
for (const p of pages)
|
|
382
|
+
token_estimates[p.slug] = Math.ceil(p.content.length / CHARS_PER_TOKEN);
|
|
383
|
+
const slug_redirects = {
|
|
384
|
+
...(oldManifest?.slug_redirects ?? {}),
|
|
385
|
+
};
|
|
386
|
+
const linkRe = /\[\[([^\]]+)\]\]/g;
|
|
387
|
+
const builtPages = pages.map((p) => {
|
|
388
|
+
const outbound_links = [];
|
|
389
|
+
linkRe.lastIndex = 0;
|
|
390
|
+
let m;
|
|
391
|
+
while ((m = linkRe.exec(p.content)) !== null) {
|
|
392
|
+
if (m[1] !== undefined)
|
|
393
|
+
outbound_links.push(m[1]);
|
|
394
|
+
}
|
|
395
|
+
return { slug: p.slug, title: p.title, type: p.type, file: p.file, outbound_links };
|
|
396
|
+
});
|
|
397
|
+
const degraded = (degradedReasons?.length ?? 0) > 0;
|
|
398
|
+
return {
|
|
399
|
+
schema_version: 2,
|
|
400
|
+
manifest_schema_version: "2.1.0",
|
|
401
|
+
generated_at: new Date().toISOString(),
|
|
402
|
+
index_hash,
|
|
403
|
+
git_commit,
|
|
404
|
+
project,
|
|
405
|
+
modules,
|
|
406
|
+
pages: builtPages,
|
|
407
|
+
slug_redirects,
|
|
408
|
+
token_estimates,
|
|
409
|
+
file_to_community,
|
|
410
|
+
degraded,
|
|
411
|
+
...(degraded ? { degraded_reasons: degradedReasons } : {}),
|
|
412
|
+
...(modules_truncated ? { modules_truncated: true } : {}),
|
|
413
|
+
...(truncation_reason ? { truncation_reason } : {}),
|
|
414
|
+
};
|
|
415
|
+
}
|
|
416
|
+
export function buildWikiManifestV1(options) {
|
|
417
|
+
const { index_hash, git_commit, pages, communities, oldManifest, degradedReasons } = options;
|
|
418
|
+
const file_to_community = buildFileToCommunityMap(communities);
|
|
419
|
+
const token_estimates = {};
|
|
420
|
+
const CHARS_PER_TOKEN = 4;
|
|
421
|
+
for (const p of pages)
|
|
422
|
+
token_estimates[p.slug] = Math.ceil(p.content.length / CHARS_PER_TOKEN);
|
|
423
|
+
const slug_redirects = { ...(oldManifest?.slug_redirects ?? {}) };
|
|
424
|
+
const linkRe = /\[\[([^\]]+)\]\]/g;
|
|
425
|
+
const builtPages = pages.map((p) => {
|
|
426
|
+
const outbound_links = [];
|
|
427
|
+
linkRe.lastIndex = 0;
|
|
428
|
+
let m;
|
|
429
|
+
while ((m = linkRe.exec(p.content)) !== null) {
|
|
430
|
+
if (m[1] !== undefined)
|
|
431
|
+
outbound_links.push(m[1]);
|
|
432
|
+
}
|
|
433
|
+
return { slug: p.slug, title: p.title, type: p.type, file: p.file, outbound_links };
|
|
434
|
+
});
|
|
435
|
+
const degraded = (degradedReasons?.length ?? 0) > 0;
|
|
436
|
+
return {
|
|
437
|
+
manifest_schema_version: "2.1.0",
|
|
438
|
+
generated_at: new Date().toISOString(),
|
|
439
|
+
index_hash,
|
|
440
|
+
git_commit,
|
|
441
|
+
pages: builtPages,
|
|
442
|
+
slug_redirects,
|
|
443
|
+
token_estimates,
|
|
444
|
+
file_to_community,
|
|
445
|
+
degraded,
|
|
446
|
+
...(degraded ? { degraded_reasons: degradedReasons } : {}),
|
|
447
|
+
};
|
|
448
|
+
}
|
|
449
|
+
//# sourceMappingURL=wiki-module-builder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wiki-module-builder.js","sourceRoot":"","sources":["../../src/tools/wiki-module-builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Non-JS manifest parsers + key-dependency selector for buildProjectOverview.
|
|
3
|
+
* Narrow scope by design — we only extract the few fields the wiki overview
|
|
4
|
+
* needs, not full TOML/Go-module parse trees.
|
|
5
|
+
*/
|
|
6
|
+
import type { DependencySummary } from "./wiki-manifest.js";
|
|
7
|
+
import type { ProjectProfile } from "./project-tools.js";
|
|
8
|
+
export interface GoModSummary {
|
|
9
|
+
name: string | null;
|
|
10
|
+
deps: string[];
|
|
11
|
+
}
|
|
12
|
+
export interface TomlProjectSummary {
|
|
13
|
+
name: string | null;
|
|
14
|
+
version: string | null;
|
|
15
|
+
description: string | null;
|
|
16
|
+
deps: string[];
|
|
17
|
+
}
|
|
18
|
+
export declare function parseGoMod(source: string): GoModSummary;
|
|
19
|
+
/** Narrow regex-based parse of pyproject.toml `[project]` section. */
|
|
20
|
+
export declare function parsePyprojectToml(source: string): TomlProjectSummary;
|
|
21
|
+
export declare function parseCargoToml(source: string): TomlProjectSummary;
|
|
22
|
+
/** Detect shallow clone (git rev-parse --is-shallow-repository). Safe on
|
|
23
|
+
* missing git binary / non-repo / permission errors. */
|
|
24
|
+
export declare function isShallowClone(root: string): boolean;
|
|
25
|
+
export declare function selectKeyDependencies(projectResult: ProjectProfile): DependencySummary;
|
|
26
|
+
//# sourceMappingURL=wiki-overview-sources.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wiki-overview-sources.d.ts","sourceRoot":"","sources":["../../src/tools/wiki-overview-sources.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAGzD,MAAM,WAAW,YAAY;IAAG,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAA;CAAE;AACrE,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,CAcvD;AAED,sEAAsE;AACtE,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,kBAAkB,CAerE;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,kBAAkB,CAajE;AAwBD;yDACyD;AACzD,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAUpD;AAwBD,wBAAgB,qBAAqB,CAAC,aAAa,EAAE,cAAc,GAAG,iBAAiB,CAYtF"}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import { execFileSync } from "node:child_process";
|
|
2
|
+
export function parseGoMod(source) {
|
|
3
|
+
const nameMatch = source.match(/^module\s+(\S+)/m);
|
|
4
|
+
const deps = [];
|
|
5
|
+
const requireBlock = source.match(/require\s*\(([^)]*)\)/);
|
|
6
|
+
if (requireBlock?.[1]) {
|
|
7
|
+
for (const line of requireBlock[1].split("\n")) {
|
|
8
|
+
const m = line.trim().match(/^([^\s]+)\s+/);
|
|
9
|
+
if (m?.[1])
|
|
10
|
+
deps.push(m[1]);
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
for (const m of source.matchAll(/^require\s+([^\s]+)\s+/gm)) {
|
|
14
|
+
if (m[1])
|
|
15
|
+
deps.push(m[1]);
|
|
16
|
+
}
|
|
17
|
+
return { name: nameMatch?.[1] ?? null, deps };
|
|
18
|
+
}
|
|
19
|
+
/** Narrow regex-based parse of pyproject.toml `[project]` section. */
|
|
20
|
+
export function parsePyprojectToml(source) {
|
|
21
|
+
const section = extractTomlSection(source, "project");
|
|
22
|
+
const name = matchTomlKey(section, "name");
|
|
23
|
+
const version = matchTomlKey(section, "version");
|
|
24
|
+
const description = matchTomlKey(section, "description");
|
|
25
|
+
const deps = [];
|
|
26
|
+
const depsArray = section.match(/dependencies\s*=\s*\[([\s\S]*?)\]/);
|
|
27
|
+
if (depsArray?.[1]) {
|
|
28
|
+
for (const m of depsArray[1].matchAll(/"([^"]+)"/g)) {
|
|
29
|
+
// e.g. "fastapi>=0.100" -> fastapi
|
|
30
|
+
const base = m[1].split(/[<>=\s!~]/)[0];
|
|
31
|
+
if (base)
|
|
32
|
+
deps.push(base);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
return { name, version, description, deps };
|
|
36
|
+
}
|
|
37
|
+
export function parseCargoToml(source) {
|
|
38
|
+
const section = extractTomlSection(source, "package");
|
|
39
|
+
const depsSection = extractTomlSection(source, "dependencies");
|
|
40
|
+
const deps = [];
|
|
41
|
+
for (const m of depsSection.matchAll(/^([A-Za-z0-9_-]+)\s*=/gm)) {
|
|
42
|
+
if (m[1])
|
|
43
|
+
deps.push(m[1]);
|
|
44
|
+
}
|
|
45
|
+
return {
|
|
46
|
+
name: matchTomlKey(section, "name"),
|
|
47
|
+
version: matchTomlKey(section, "version"),
|
|
48
|
+
description: matchTomlKey(section, "description"),
|
|
49
|
+
deps,
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
function extractTomlSection(source, name) {
|
|
53
|
+
// Find the header line, then capture everything until the next section header
|
|
54
|
+
// or end of input.
|
|
55
|
+
const lines = source.split("\n");
|
|
56
|
+
const headerRe = new RegExp(`^\\[${name}\\]\\s*$`);
|
|
57
|
+
let startIdx = -1;
|
|
58
|
+
for (let i = 0; i < lines.length; i++) {
|
|
59
|
+
if (headerRe.test(lines[i])) {
|
|
60
|
+
startIdx = i + 1;
|
|
61
|
+
break;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
if (startIdx < 0)
|
|
65
|
+
return "";
|
|
66
|
+
let endIdx = lines.length;
|
|
67
|
+
for (let i = startIdx; i < lines.length; i++) {
|
|
68
|
+
if (/^\[[^\]]+\]\s*$/.test(lines[i])) {
|
|
69
|
+
endIdx = i;
|
|
70
|
+
break;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
return lines.slice(startIdx, endIdx).join("\n");
|
|
74
|
+
}
|
|
75
|
+
function matchTomlKey(section, key) {
|
|
76
|
+
const m = section.match(new RegExp(`^\\s*${key}\\s*=\\s*"([^"]*)"`, "m"));
|
|
77
|
+
return m?.[1] ?? null;
|
|
78
|
+
}
|
|
79
|
+
/** Detect shallow clone (git rev-parse --is-shallow-repository). Safe on
|
|
80
|
+
* missing git binary / non-repo / permission errors. */
|
|
81
|
+
export function isShallowClone(root) {
|
|
82
|
+
try {
|
|
83
|
+
const out = execFileSync("git", ["rev-parse", "--is-shallow-repository"], {
|
|
84
|
+
cwd: root,
|
|
85
|
+
stdio: ["ignore", "pipe", "ignore"],
|
|
86
|
+
});
|
|
87
|
+
return out.toString().trim() === "true";
|
|
88
|
+
}
|
|
89
|
+
catch {
|
|
90
|
+
return false;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
/** Architectural relevance table for selectKeyDependencies. */
|
|
94
|
+
const ARCH_RELEVANT = new Set([
|
|
95
|
+
// Frameworks
|
|
96
|
+
"react", "next", "vue", "angular", "svelte", "solid-js", "nuxt", "gatsby", "remix",
|
|
97
|
+
"express", "fastify", "hono", "@nestjs/core", "koa", "hapi",
|
|
98
|
+
"fastapi", "flask", "django", "pyramid", "starlette",
|
|
99
|
+
// DB / ORM
|
|
100
|
+
"prisma", "@prisma/client", "pg", "mysql2", "mongodb", "mongoose", "drizzle-orm",
|
|
101
|
+
"typeorm", "sequelize", "redis", "ioredis", "sqlalchemy", "peewee",
|
|
102
|
+
// Testing
|
|
103
|
+
"vitest", "jest", "mocha", "cypress", "playwright", "pytest",
|
|
104
|
+
// Build / bundler
|
|
105
|
+
"vite", "webpack", "rollup", "esbuild", "parcel", "tsup", "turbopack",
|
|
106
|
+
// Language / type
|
|
107
|
+
"typescript", "ts-node", "tsx",
|
|
108
|
+
// Validation / schema
|
|
109
|
+
"zod", "yup", "joi", "pydantic",
|
|
110
|
+
// State / data
|
|
111
|
+
"zustand", "redux", "@tanstack/react-query", "swr", "graphql", "apollo-server",
|
|
112
|
+
"@trpc/server",
|
|
113
|
+
]);
|
|
114
|
+
export function selectKeyDependencies(projectResult) {
|
|
115
|
+
const dh = projectResult.dependency_health;
|
|
116
|
+
const prodTotal = dh?.prod ?? 0;
|
|
117
|
+
const devTotal = dh?.dev ?? 0;
|
|
118
|
+
const key = [];
|
|
119
|
+
const kv = dh?.key_versions ?? {};
|
|
120
|
+
for (const [name, version] of Object.entries(kv)) {
|
|
121
|
+
if (key.length >= 15)
|
|
122
|
+
break;
|
|
123
|
+
const kind = ARCH_RELEVANT.has(name) ? "prod" : "prod";
|
|
124
|
+
key.push({ name, version: String(version), kind });
|
|
125
|
+
}
|
|
126
|
+
return { prod_total: prodTotal, dev_total: devTotal, key };
|
|
127
|
+
}
|
|
128
|
+
//# sourceMappingURL=wiki-overview-sources.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wiki-overview-sources.js","sourceRoot":"","sources":["../../src/tools/wiki-overview-sources.ts"],"names":[],"mappings":"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"}
|