@monoes/monograph 1.5.4 → 1.5.5
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/src/pipeline/phases/llm-extract.d.ts.map +1 -1
- package/dist/src/pipeline/phases/llm-extract.js +12 -0
- package/dist/src/pipeline/phases/llm-extract.js.map +1 -1
- package/dist/src/wiki/wiki-generator.d.ts.map +1 -1
- package/dist/src/wiki/wiki-generator.js +5 -1
- package/dist/src/wiki/wiki-generator.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +3 -1
- package/src/pipeline/phases/llm-extract.ts +14 -0
- package/src/wiki/wiki-generator.ts +7 -1
- package/dist/src/__tests__/analysis/benchmark.test.d.ts +0 -2
- package/dist/src/__tests__/analysis/benchmark.test.d.ts.map +0 -1
- package/dist/src/__tests__/analysis/benchmark.test.js +0 -54
- package/dist/src/__tests__/analysis/benchmark.test.js.map +0 -1
- package/dist/src/__tests__/analysis/cluster-quality.test.d.ts +0 -2
- package/dist/src/__tests__/analysis/cluster-quality.test.d.ts.map +0 -1
- package/dist/src/__tests__/analysis/cluster-quality.test.js +0 -99
- package/dist/src/__tests__/analysis/cluster-quality.test.js.map +0 -1
- package/dist/src/__tests__/analysis/corpus-health.test.d.ts +0 -2
- package/dist/src/__tests__/analysis/corpus-health.test.d.ts.map +0 -1
- package/dist/src/__tests__/analysis/corpus-health.test.js +0 -29
- package/dist/src/__tests__/analysis/corpus-health.test.js.map +0 -1
- package/dist/src/__tests__/analysis/dependency-health.test.d.ts +0 -2
- package/dist/src/__tests__/analysis/dependency-health.test.d.ts.map +0 -1
- package/dist/src/__tests__/analysis/dependency-health.test.js +0 -96
- package/dist/src/__tests__/analysis/dependency-health.test.js.map +0 -1
- package/dist/src/__tests__/analysis/file-classifier.test.d.ts +0 -2
- package/dist/src/__tests__/analysis/file-classifier.test.d.ts.map +0 -1
- package/dist/src/__tests__/analysis/file-classifier.test.js +0 -49
- package/dist/src/__tests__/analysis/file-classifier.test.js.map +0 -1
- package/dist/src/__tests__/analysis/node-similarity.test.d.ts +0 -2
- package/dist/src/__tests__/analysis/node-similarity.test.d.ts.map +0 -1
- package/dist/src/__tests__/analysis/node-similarity.test.js +0 -66
- package/dist/src/__tests__/analysis/node-similarity.test.js.map +0 -1
- package/dist/src/__tests__/cache/augment-cache.test.d.ts +0 -2
- package/dist/src/__tests__/cache/augment-cache.test.d.ts.map +0 -1
- package/dist/src/__tests__/cache/augment-cache.test.js +0 -47
- package/dist/src/__tests__/cache/augment-cache.test.js.map +0 -1
- package/dist/src/__tests__/cli/check-update.test.d.ts +0 -2
- package/dist/src/__tests__/cli/check-update.test.d.ts.map +0 -1
- package/dist/src/__tests__/cli/check-update.test.js +0 -38
- package/dist/src/__tests__/cli/check-update.test.js.map +0 -1
- package/dist/src/__tests__/cli/hooks-install.test.d.ts +0 -2
- package/dist/src/__tests__/cli/hooks-install.test.d.ts.map +0 -1
- package/dist/src/__tests__/cli/hooks-install.test.js +0 -48
- package/dist/src/__tests__/cli/hooks-install.test.js.map +0 -1
- package/dist/src/__tests__/cli/hooks-marker.test.d.ts +0 -2
- package/dist/src/__tests__/cli/hooks-marker.test.d.ts.map +0 -1
- package/dist/src/__tests__/cli/hooks-marker.test.js +0 -115
- package/dist/src/__tests__/cli/hooks-marker.test.js.map +0 -1
- package/dist/src/__tests__/cli/hooks-status.test.d.ts +0 -2
- package/dist/src/__tests__/cli/hooks-status.test.d.ts.map +0 -1
- package/dist/src/__tests__/cli/hooks-status.test.js +0 -36
- package/dist/src/__tests__/cli/hooks-status.test.js.map +0 -1
- package/dist/src/__tests__/export/adjacency-matrix.test.d.ts +0 -2
- package/dist/src/__tests__/export/adjacency-matrix.test.d.ts.map +0 -1
- package/dist/src/__tests__/export/adjacency-matrix.test.js +0 -103
- package/dist/src/__tests__/export/adjacency-matrix.test.js.map +0 -1
- package/dist/src/__tests__/export/csv.test.d.ts +0 -2
- package/dist/src/__tests__/export/csv.test.d.ts.map +0 -1
- package/dist/src/__tests__/export/csv.test.js +0 -34
- package/dist/src/__tests__/export/csv.test.js.map +0 -1
- package/dist/src/__tests__/export/dot.test.d.ts +0 -2
- package/dist/src/__tests__/export/dot.test.d.ts.map +0 -1
- package/dist/src/__tests__/export/dot.test.js +0 -73
- package/dist/src/__tests__/export/dot.test.js.map +0 -1
- package/dist/src/__tests__/export/gexf.test.d.ts +0 -2
- package/dist/src/__tests__/export/gexf.test.d.ts.map +0 -1
- package/dist/src/__tests__/export/gexf.test.js +0 -66
- package/dist/src/__tests__/export/gexf.test.js.map +0 -1
- package/dist/src/__tests__/export/graphml.test.d.ts +0 -2
- package/dist/src/__tests__/export/graphml.test.d.ts.map +0 -1
- package/dist/src/__tests__/export/graphml.test.js +0 -51
- package/dist/src/__tests__/export/graphml.test.js.map +0 -1
- package/dist/src/__tests__/export/mermaid.test.d.ts +0 -2
- package/dist/src/__tests__/export/mermaid.test.d.ts.map +0 -1
- package/dist/src/__tests__/export/mermaid.test.js +0 -78
- package/dist/src/__tests__/export/mermaid.test.js.map +0 -1
- package/dist/src/__tests__/graph/betweenness.test.d.ts +0 -2
- package/dist/src/__tests__/graph/betweenness.test.d.ts.map +0 -1
- package/dist/src/__tests__/graph/betweenness.test.js +0 -77
- package/dist/src/__tests__/graph/betweenness.test.js.map +0 -1
- package/dist/src/__tests__/graph/cycles.test.d.ts +0 -2
- package/dist/src/__tests__/graph/cycles.test.d.ts.map +0 -1
- package/dist/src/__tests__/graph/cycles.test.js +0 -119
- package/dist/src/__tests__/graph/cycles.test.js.map +0 -1
- package/dist/src/__tests__/graph/dead-code.test.d.ts +0 -2
- package/dist/src/__tests__/graph/dead-code.test.d.ts.map +0 -1
- package/dist/src/__tests__/graph/dead-code.test.js +0 -89
- package/dist/src/__tests__/graph/dead-code.test.js.map +0 -1
- package/dist/src/__tests__/graph/dfs.test.d.ts +0 -2
- package/dist/src/__tests__/graph/dfs.test.d.ts.map +0 -1
- package/dist/src/__tests__/graph/dfs.test.js +0 -56
- package/dist/src/__tests__/graph/dfs.test.js.map +0 -1
- package/dist/src/__tests__/graph/diff-summary.test.d.ts +0 -2
- package/dist/src/__tests__/graph/diff-summary.test.d.ts.map +0 -1
- package/dist/src/__tests__/graph/diff-summary.test.js +0 -74
- package/dist/src/__tests__/graph/diff-summary.test.js.map +0 -1
- package/dist/src/__tests__/graph/edge-filter.test.d.ts +0 -2
- package/dist/src/__tests__/graph/edge-filter.test.d.ts.map +0 -1
- package/dist/src/__tests__/graph/edge-filter.test.js +0 -117
- package/dist/src/__tests__/graph/edge-filter.test.js.map +0 -1
- package/dist/src/__tests__/graph/import-chain.test.d.ts +0 -2
- package/dist/src/__tests__/graph/import-chain.test.d.ts.map +0 -1
- package/dist/src/__tests__/graph/import-chain.test.js +0 -101
- package/dist/src/__tests__/graph/import-chain.test.js.map +0 -1
- package/dist/src/__tests__/graph/merge.test.d.ts +0 -2
- package/dist/src/__tests__/graph/merge.test.d.ts.map +0 -1
- package/dist/src/__tests__/graph/merge.test.js +0 -132
- package/dist/src/__tests__/graph/merge.test.js.map +0 -1
- package/dist/src/__tests__/graph/node-search.test.d.ts +0 -2
- package/dist/src/__tests__/graph/node-search.test.d.ts.map +0 -1
- package/dist/src/__tests__/graph/node-search.test.js +0 -127
- package/dist/src/__tests__/graph/node-search.test.js.map +0 -1
- package/dist/src/__tests__/graph/normalize-id.test.d.ts +0 -2
- package/dist/src/__tests__/graph/normalize-id.test.d.ts.map +0 -1
- package/dist/src/__tests__/graph/normalize-id.test.js +0 -88
- package/dist/src/__tests__/graph/normalize-id.test.js.map +0 -1
- package/dist/src/__tests__/graph/pagerank.test.d.ts +0 -2
- package/dist/src/__tests__/graph/pagerank.test.d.ts.map +0 -1
- package/dist/src/__tests__/graph/pagerank.test.js +0 -87
- package/dist/src/__tests__/graph/pagerank.test.js.map +0 -1
- package/dist/src/__tests__/graph/prune.test.d.ts +0 -2
- package/dist/src/__tests__/graph/prune.test.d.ts.map +0 -1
- package/dist/src/__tests__/graph/prune.test.js +0 -98
- package/dist/src/__tests__/graph/prune.test.js.map +0 -1
- package/dist/src/__tests__/graph/regex-search.test.d.ts +0 -2
- package/dist/src/__tests__/graph/regex-search.test.d.ts.map +0 -1
- package/dist/src/__tests__/graph/regex-search.test.js +0 -128
- package/dist/src/__tests__/graph/regex-search.test.js.map +0 -1
- package/dist/src/__tests__/graph/ripple-impact.test.d.ts +0 -2
- package/dist/src/__tests__/graph/ripple-impact.test.d.ts.map +0 -1
- package/dist/src/__tests__/graph/ripple-impact.test.js +0 -64
- package/dist/src/__tests__/graph/ripple-impact.test.js.map +0 -1
- package/dist/src/__tests__/graph/scc.test.d.ts +0 -2
- package/dist/src/__tests__/graph/scc.test.d.ts.map +0 -1
- package/dist/src/__tests__/graph/scc.test.js +0 -77
- package/dist/src/__tests__/graph/scc.test.js.map +0 -1
- package/dist/src/__tests__/graph/statistics.test.d.ts +0 -2
- package/dist/src/__tests__/graph/statistics.test.d.ts.map +0 -1
- package/dist/src/__tests__/graph/statistics.test.js +0 -197
- package/dist/src/__tests__/graph/statistics.test.js.map +0 -1
- package/dist/src/__tests__/graph/subgraph.test.d.ts +0 -2
- package/dist/src/__tests__/graph/subgraph.test.d.ts.map +0 -1
- package/dist/src/__tests__/graph/subgraph.test.js +0 -116
- package/dist/src/__tests__/graph/subgraph.test.js.map +0 -1
- package/dist/src/__tests__/graph/topo-sort.test.d.ts +0 -2
- package/dist/src/__tests__/graph/topo-sort.test.d.ts.map +0 -1
- package/dist/src/__tests__/graph/topo-sort.test.js +0 -101
- package/dist/src/__tests__/graph/topo-sort.test.js.map +0 -1
- package/dist/src/__tests__/graph/wcc.test.d.ts +0 -2
- package/dist/src/__tests__/graph/wcc.test.d.ts.map +0 -1
- package/dist/src/__tests__/graph/wcc.test.js +0 -91
- package/dist/src/__tests__/graph/wcc.test.js.map +0 -1
- package/dist/src/__tests__/groups/grpc-extractor.test.d.ts +0 -2
- package/dist/src/__tests__/groups/grpc-extractor.test.d.ts.map +0 -1
- package/dist/src/__tests__/groups/grpc-extractor.test.js +0 -42
- package/dist/src/__tests__/groups/grpc-extractor.test.js.map +0 -1
- package/dist/src/__tests__/groups/service-boundary.test.d.ts +0 -2
- package/dist/src/__tests__/groups/service-boundary.test.d.ts.map +0 -1
- package/dist/src/__tests__/groups/service-boundary.test.js +0 -75
- package/dist/src/__tests__/groups/service-boundary.test.js.map +0 -1
- package/dist/src/__tests__/groups/topic-extractor.test.d.ts +0 -2
- package/dist/src/__tests__/groups/topic-extractor.test.d.ts.map +0 -1
- package/dist/src/__tests__/groups/topic-extractor.test.js +0 -37
- package/dist/src/__tests__/groups/topic-extractor.test.js.map +0 -1
- package/dist/src/__tests__/ingest/git-clone.test.d.ts +0 -2
- package/dist/src/__tests__/ingest/git-clone.test.d.ts.map +0 -1
- package/dist/src/__tests__/ingest/git-clone.test.js +0 -100
- package/dist/src/__tests__/ingest/git-clone.test.js.map +0 -1
- package/dist/src/__tests__/ingest/query-memory.test.d.ts +0 -2
- package/dist/src/__tests__/ingest/query-memory.test.d.ts.map +0 -1
- package/dist/src/__tests__/ingest/query-memory.test.js +0 -116
- package/dist/src/__tests__/ingest/query-memory.test.js.map +0 -1
- package/dist/src/__tests__/ingest/transcribe.test.d.ts +0 -2
- package/dist/src/__tests__/ingest/transcribe.test.d.ts.map +0 -1
- package/dist/src/__tests__/ingest/transcribe.test.js +0 -50
- package/dist/src/__tests__/ingest/transcribe.test.js.map +0 -1
- package/dist/src/__tests__/ingest/url-ingest.test.d.ts +0 -2
- package/dist/src/__tests__/ingest/url-ingest.test.d.ts.map +0 -1
- package/dist/src/__tests__/ingest/url-ingest.test.js +0 -43
- package/dist/src/__tests__/ingest/url-ingest.test.js.map +0 -1
- package/dist/src/__tests__/mcp-resources/repo-context-resource.test.d.ts +0 -2
- package/dist/src/__tests__/mcp-resources/repo-context-resource.test.d.ts.map +0 -1
- package/dist/src/__tests__/mcp-resources/repo-context-resource.test.js +0 -34
- package/dist/src/__tests__/mcp-resources/repo-context-resource.test.js.map +0 -1
- package/dist/src/__tests__/mcp-resources/repos-resource.test.d.ts +0 -2
- package/dist/src/__tests__/mcp-resources/repos-resource.test.d.ts.map +0 -1
- package/dist/src/__tests__/mcp-resources/repos-resource.test.js +0 -63
- package/dist/src/__tests__/mcp-resources/repos-resource.test.js.map +0 -1
- package/dist/src/__tests__/mcp-resources/wiki-resource.test.d.ts +0 -2
- package/dist/src/__tests__/mcp-resources/wiki-resource.test.d.ts.map +0 -1
- package/dist/src/__tests__/mcp-resources/wiki-resource.test.js +0 -47
- package/dist/src/__tests__/mcp-resources/wiki-resource.test.js.map +0 -1
- package/dist/src/__tests__/mcp-tools/explain.test.d.ts +0 -2
- package/dist/src/__tests__/mcp-tools/explain.test.d.ts.map +0 -1
- package/dist/src/__tests__/mcp-tools/explain.test.js +0 -42
- package/dist/src/__tests__/mcp-tools/explain.test.js.map +0 -1
- package/dist/src/__tests__/mcp-tools/graph-query.test.d.ts +0 -2
- package/dist/src/__tests__/mcp-tools/graph-query.test.d.ts.map +0 -1
- package/dist/src/__tests__/mcp-tools/graph-query.test.js +0 -41
- package/dist/src/__tests__/mcp-tools/graph-query.test.js.map +0 -1
- package/dist/src/__tests__/mcp-tools/group-sync.test.d.ts +0 -2
- package/dist/src/__tests__/mcp-tools/group-sync.test.d.ts.map +0 -1
- package/dist/src/__tests__/mcp-tools/group-sync.test.js +0 -8
- package/dist/src/__tests__/mcp-tools/group-sync.test.js.map +0 -1
- package/dist/src/__tests__/mcp-tools/impact-filtering.test.d.ts +0 -2
- package/dist/src/__tests__/mcp-tools/impact-filtering.test.d.ts.map +0 -1
- package/dist/src/__tests__/mcp-tools/impact-filtering.test.js +0 -45
- package/dist/src/__tests__/mcp-tools/impact-filtering.test.js.map +0 -1
- package/dist/src/__tests__/mcp-tools/impact.risk.test.d.ts +0 -2
- package/dist/src/__tests__/mcp-tools/impact.risk.test.d.ts.map +0 -1
- package/dist/src/__tests__/mcp-tools/impact.risk.test.js +0 -21
- package/dist/src/__tests__/mcp-tools/impact.risk.test.js.map +0 -1
- package/dist/src/__tests__/mcp-tools/list-repos.test.d.ts +0 -2
- package/dist/src/__tests__/mcp-tools/list-repos.test.d.ts.map +0 -1
- package/dist/src/__tests__/mcp-tools/list-repos.test.js +0 -21
- package/dist/src/__tests__/mcp-tools/list-repos.test.js.map +0 -1
- package/dist/src/__tests__/mcp-tools/neighbors.test.d.ts +0 -2
- package/dist/src/__tests__/mcp-tools/neighbors.test.d.ts.map +0 -1
- package/dist/src/__tests__/mcp-tools/neighbors.test.js +0 -44
- package/dist/src/__tests__/mcp-tools/neighbors.test.js.map +0 -1
- package/dist/src/__tests__/mcp-tools/query.test.d.ts +0 -2
- package/dist/src/__tests__/mcp-tools/query.test.d.ts.map +0 -1
- package/dist/src/__tests__/mcp-tools/query.test.js +0 -37
- package/dist/src/__tests__/mcp-tools/query.test.js.map +0 -1
- package/dist/src/__tests__/parsers/language-parsers.test.d.ts +0 -2
- package/dist/src/__tests__/parsers/language-parsers.test.d.ts.map +0 -1
- package/dist/src/__tests__/parsers/language-parsers.test.js +0 -48
- package/dist/src/__tests__/parsers/language-parsers.test.js.map +0 -1
- package/dist/src/__tests__/parsers/named-bindings.test.d.ts +0 -2
- package/dist/src/__tests__/parsers/named-bindings.test.d.ts.map +0 -1
- package/dist/src/__tests__/parsers/named-bindings.test.js +0 -68
- package/dist/src/__tests__/parsers/named-bindings.test.js.map +0 -1
- package/dist/src/__tests__/pipeline/cluster-only.test.d.ts +0 -2
- package/dist/src/__tests__/pipeline/cluster-only.test.d.ts.map +0 -1
- package/dist/src/__tests__/pipeline/cluster-only.test.js +0 -31
- package/dist/src/__tests__/pipeline/cluster-only.test.js.map +0 -1
- package/dist/src/__tests__/pipeline/incremental.test.d.ts +0 -2
- package/dist/src/__tests__/pipeline/incremental.test.d.ts.map +0 -1
- package/dist/src/__tests__/pipeline/incremental.test.js +0 -38
- package/dist/src/__tests__/pipeline/incremental.test.js.map +0 -1
- package/dist/src/__tests__/pipeline/phases/communities.cohesion.test.d.ts +0 -2
- package/dist/src/__tests__/pipeline/phases/communities.cohesion.test.d.ts.map +0 -1
- package/dist/src/__tests__/pipeline/phases/communities.cohesion.test.js +0 -40
- package/dist/src/__tests__/pipeline/phases/communities.cohesion.test.js.map +0 -1
- package/dist/src/__tests__/pipeline/phases/community-split.test.d.ts +0 -2
- package/dist/src/__tests__/pipeline/phases/community-split.test.d.ts.map +0 -1
- package/dist/src/__tests__/pipeline/phases/community-split.test.js +0 -27
- package/dist/src/__tests__/pipeline/phases/community-split.test.js.map +0 -1
- package/dist/src/__tests__/pipeline/phases/framework-detect.test.d.ts +0 -2
- package/dist/src/__tests__/pipeline/phases/framework-detect.test.d.ts.map +0 -1
- package/dist/src/__tests__/pipeline/phases/framework-detect.test.js +0 -56
- package/dist/src/__tests__/pipeline/phases/framework-detect.test.js.map +0 -1
- package/dist/src/__tests__/pipeline/phases/import-resolver.test.d.ts +0 -2
- package/dist/src/__tests__/pipeline/phases/import-resolver.test.d.ts.map +0 -1
- package/dist/src/__tests__/pipeline/phases/import-resolver.test.js +0 -56
- package/dist/src/__tests__/pipeline/phases/import-resolver.test.js.map +0 -1
- package/dist/src/__tests__/pipeline/phases/parse-arrow.test.d.ts +0 -2
- package/dist/src/__tests__/pipeline/phases/parse-arrow.test.d.ts.map +0 -1
- package/dist/src/__tests__/pipeline/phases/parse-arrow.test.js +0 -30
- package/dist/src/__tests__/pipeline/phases/parse-arrow.test.js.map +0 -1
- package/dist/src/__tests__/pipeline/phases/parse-csharp.test.d.ts +0 -2
- package/dist/src/__tests__/pipeline/phases/parse-csharp.test.d.ts.map +0 -1
- package/dist/src/__tests__/pipeline/phases/parse-csharp.test.js +0 -30
- package/dist/src/__tests__/pipeline/phases/parse-csharp.test.js.map +0 -1
- package/dist/src/__tests__/pipeline/phases/scan.monographignore.test.d.ts +0 -2
- package/dist/src/__tests__/pipeline/phases/scan.monographignore.test.d.ts.map +0 -1
- package/dist/src/__tests__/pipeline/phases/scan.monographignore.test.js +0 -46
- package/dist/src/__tests__/pipeline/phases/scan.monographignore.test.js.map +0 -1
- package/dist/src/__tests__/pipeline/phases/scan.negation.test.d.ts +0 -2
- package/dist/src/__tests__/pipeline/phases/scan.negation.test.d.ts.map +0 -1
- package/dist/src/__tests__/pipeline/phases/scan.negation.test.js +0 -35
- package/dist/src/__tests__/pipeline/phases/scan.negation.test.js.map +0 -1
- package/dist/src/__tests__/pipeline/phases/scope-resolution.go.test.d.ts +0 -2
- package/dist/src/__tests__/pipeline/phases/scope-resolution.go.test.d.ts.map +0 -1
- package/dist/src/__tests__/pipeline/phases/scope-resolution.go.test.js +0 -32
- package/dist/src/__tests__/pipeline/phases/scope-resolution.go.test.js.map +0 -1
- package/dist/src/__tests__/pipeline/phases/scope-resolution.java.test.d.ts +0 -2
- package/dist/src/__tests__/pipeline/phases/scope-resolution.java.test.d.ts.map +0 -1
- package/dist/src/__tests__/pipeline/phases/scope-resolution.java.test.js +0 -28
- package/dist/src/__tests__/pipeline/phases/scope-resolution.java.test.js.map +0 -1
- package/dist/src/__tests__/pipeline/phases/scope-resolution.rust.test.d.ts +0 -2
- package/dist/src/__tests__/pipeline/phases/scope-resolution.rust.test.d.ts.map +0 -1
- package/dist/src/__tests__/pipeline/phases/scope-resolution.rust.test.js +0 -29
- package/dist/src/__tests__/pipeline/phases/scope-resolution.rust.test.js.map +0 -1
- package/dist/src/__tests__/pipeline/phases/suggest-questions.test.d.ts +0 -2
- package/dist/src/__tests__/pipeline/phases/suggest-questions.test.d.ts.map +0 -1
- package/dist/src/__tests__/pipeline/phases/suggest-questions.test.js +0 -42
- package/dist/src/__tests__/pipeline/phases/suggest-questions.test.js.map +0 -1
- package/dist/src/__tests__/pipeline/phases/surprises-scoring.test.d.ts +0 -2
- package/dist/src/__tests__/pipeline/phases/surprises-scoring.test.d.ts.map +0 -1
- package/dist/src/__tests__/pipeline/phases/surprises-scoring.test.js +0 -42
- package/dist/src/__tests__/pipeline/phases/surprises-scoring.test.js.map +0 -1
- package/dist/src/__tests__/pipeline/phases/variables-phase.test.d.ts +0 -2
- package/dist/src/__tests__/pipeline/phases/variables-phase.test.d.ts.map +0 -1
- package/dist/src/__tests__/pipeline/phases/variables-phase.test.js +0 -72
- package/dist/src/__tests__/pipeline/phases/variables-phase.test.js.map +0 -1
- package/dist/src/__tests__/pipeline/phases/wildcard-phase.test.d.ts +0 -2
- package/dist/src/__tests__/pipeline/phases/wildcard-phase.test.d.ts.map +0 -1
- package/dist/src/__tests__/pipeline/phases/wildcard-phase.test.js +0 -59
- package/dist/src/__tests__/pipeline/phases/wildcard-phase.test.js.map +0 -1
- package/dist/src/__tests__/pipeline/runner.parallel.test.d.ts +0 -2
- package/dist/src/__tests__/pipeline/runner.parallel.test.d.ts.map +0 -1
- package/dist/src/__tests__/pipeline/runner.parallel.test.js +0 -66
- package/dist/src/__tests__/pipeline/runner.parallel.test.js.map +0 -1
- package/dist/src/__tests__/reporting/graph-report-confidence.test.d.ts +0 -2
- package/dist/src/__tests__/reporting/graph-report-confidence.test.d.ts.map +0 -1
- package/dist/src/__tests__/reporting/graph-report-confidence.test.js +0 -40
- package/dist/src/__tests__/reporting/graph-report-confidence.test.js.map +0 -1
- package/dist/src/__tests__/reporting/graph-report-gaps.test.d.ts +0 -2
- package/dist/src/__tests__/reporting/graph-report-gaps.test.d.ts.map +0 -1
- package/dist/src/__tests__/reporting/graph-report-gaps.test.js +0 -38
- package/dist/src/__tests__/reporting/graph-report-gaps.test.js.map +0 -1
- package/dist/src/__tests__/scope-resolution/evidence-weights.test.d.ts +0 -2
- package/dist/src/__tests__/scope-resolution/evidence-weights.test.d.ts.map +0 -1
- package/dist/src/__tests__/scope-resolution/evidence-weights.test.js +0 -40
- package/dist/src/__tests__/scope-resolution/evidence-weights.test.js.map +0 -1
- package/dist/src/__tests__/search/diacritic.test.d.ts +0 -2
- package/dist/src/__tests__/search/diacritic.test.d.ts.map +0 -1
- package/dist/src/__tests__/search/diacritic.test.js +0 -23
- package/dist/src/__tests__/search/diacritic.test.js.map +0 -1
- package/dist/src/__tests__/security/safe-fetch.test.d.ts +0 -2
- package/dist/src/__tests__/security/safe-fetch.test.d.ts.map +0 -1
- package/dist/src/__tests__/security/safe-fetch.test.js +0 -113
- package/dist/src/__tests__/security/safe-fetch.test.js.map +0 -1
- package/dist/src/__tests__/skills/platform-skills.extra.test.d.ts +0 -2
- package/dist/src/__tests__/skills/platform-skills.extra.test.d.ts.map +0 -1
- package/dist/src/__tests__/skills/platform-skills.extra.test.js +0 -31
- package/dist/src/__tests__/skills/platform-skills.extra.test.js.map +0 -1
- package/dist/src/__tests__/web/api.clusters.test.d.ts +0 -2
- package/dist/src/__tests__/web/api.clusters.test.d.ts.map +0 -1
- package/dist/src/__tests__/web/api.clusters.test.js +0 -59
- package/dist/src/__tests__/web/api.clusters.test.js.map +0 -1
- package/dist/src/__tests__/web/api.file.test.d.ts +0 -2
- package/dist/src/__tests__/web/api.file.test.d.ts.map +0 -1
- package/dist/src/__tests__/web/api.file.test.js +0 -38
- package/dist/src/__tests__/web/api.file.test.js.map +0 -1
- package/dist/src/__tests__/web/api.grep.test.d.ts +0 -2
- package/dist/src/__tests__/web/api.grep.test.d.ts.map +0 -1
- package/dist/src/__tests__/web/api.grep.test.js +0 -43
- package/dist/src/__tests__/web/api.grep.test.js.map +0 -1
- package/dist/src/__tests__/web/api.info.test.d.ts +0 -2
- package/dist/src/__tests__/web/api.info.test.d.ts.map +0 -1
- package/dist/src/__tests__/web/api.info.test.js +0 -17
- package/dist/src/__tests__/web/api.info.test.js.map +0 -1
- package/dist/src/__tests__/web/api.jobs.test.d.ts +0 -2
- package/dist/src/__tests__/web/api.jobs.test.d.ts.map +0 -1
- package/dist/src/__tests__/web/api.jobs.test.js +0 -40
- package/dist/src/__tests__/web/api.jobs.test.js.map +0 -1
- package/dist/src/__tests__/web/api.progress.test.d.ts +0 -2
- package/dist/src/__tests__/web/api.progress.test.d.ts.map +0 -1
- package/dist/src/__tests__/web/api.progress.test.js +0 -23
- package/dist/src/__tests__/web/api.progress.test.js.map +0 -1
- package/dist/src/__tests__/web/api.stream.test.d.ts +0 -2
- package/dist/src/__tests__/web/api.stream.test.d.ts.map +0 -1
- package/dist/src/__tests__/web/api.stream.test.js +0 -33
- package/dist/src/__tests__/web/api.stream.test.js.map +0 -1
- package/dist/src/__tests__/wiki/providers-reasoning.test.d.ts +0 -2
- package/dist/src/__tests__/wiki/providers-reasoning.test.d.ts.map +0 -1
- package/dist/src/__tests__/wiki/providers-reasoning.test.js +0 -41
- package/dist/src/__tests__/wiki/providers-reasoning.test.js.map +0 -1
- package/dist/src/__tests__/wiki/wiki-review-mode.test.d.ts +0 -2
- package/dist/src/__tests__/wiki/wiki-review-mode.test.d.ts.map +0 -1
- package/dist/src/__tests__/wiki/wiki-review-mode.test.js +0 -21
- package/dist/src/__tests__/wiki/wiki-review-mode.test.js.map +0 -1
- package/dist/src/analysis/cycles.d.ts +0 -16
- package/dist/src/analysis/cycles.d.ts.map +0 -1
- package/dist/src/analysis/cycles.js +0 -203
- package/dist/src/analysis/cycles.js.map +0 -1
- package/dist/src/analysis/trace.d.ts +0 -80
- package/dist/src/analysis/trace.d.ts.map +0 -1
- package/dist/src/analysis/trace.js +0 -186
- package/dist/src/analysis/trace.js.map +0 -1
- package/dist/src/analysis/worker-pool.d.ts +0 -17
- package/dist/src/analysis/worker-pool.d.ts.map +0 -1
- package/dist/src/analysis/worker-pool.js +0 -62
- package/dist/src/analysis/worker-pool.js.map +0 -1
- package/dist/src/coverage/runtime.d.ts +0 -36
- package/dist/src/coverage/runtime.d.ts.map +0 -1
- package/dist/src/coverage/runtime.js +0 -187
- package/dist/src/coverage/runtime.js.map +0 -1
- package/dist/src/graph/clone-detector.d.ts +0 -15
- package/dist/src/graph/clone-detector.d.ts.map +0 -1
- package/dist/src/graph/clone-detector.js +0 -132
- package/dist/src/graph/clone-detector.js.map +0 -1
- package/dist/src/graph/shingle-filter.d.ts +0 -6
- package/dist/src/graph/shingle-filter.d.ts.map +0 -1
- package/dist/src/graph/shingle-filter.js +0 -129
- package/dist/src/graph/shingle-filter.js.map +0 -1
- package/dist/src/watch/watch-runner.d.ts +0 -16
- package/dist/src/watch/watch-runner.d.ts.map +0 -1
- package/dist/src/watch/watch-runner.js +0 -49
- package/dist/src/watch/watch-runner.js.map +0 -1
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect } from 'vitest';
|
|
2
|
-
import Database from 'better-sqlite3';
|
|
3
|
-
import { checkUpdate } from '../../cli/check-update.js';
|
|
4
|
-
function makeDb(indexedAt = null) {
|
|
5
|
-
const db = new Database(':memory:');
|
|
6
|
-
db.exec(`
|
|
7
|
-
CREATE TABLE index_meta (key TEXT PRIMARY KEY, value TEXT);
|
|
8
|
-
`);
|
|
9
|
-
if (indexedAt) {
|
|
10
|
-
db.prepare("INSERT INTO index_meta VALUES ('indexed_at', ?)").run(indexedAt);
|
|
11
|
-
}
|
|
12
|
-
return db;
|
|
13
|
-
}
|
|
14
|
-
describe('checkUpdate', () => {
|
|
15
|
-
it('returns needsUpdate=true when index is very old', () => {
|
|
16
|
-
const db = makeDb('2020-01-01T00:00:00.000Z');
|
|
17
|
-
const result = checkUpdate(db, { maxAgeMs: 1000 });
|
|
18
|
-
expect(result.needsUpdate).toBe(true);
|
|
19
|
-
});
|
|
20
|
-
it('returns needsUpdate=false when index is fresh', () => {
|
|
21
|
-
const db = makeDb(new Date().toISOString());
|
|
22
|
-
const result = checkUpdate(db, { maxAgeMs: 60_000 });
|
|
23
|
-
expect(result.needsUpdate).toBe(false);
|
|
24
|
-
});
|
|
25
|
-
it('returns needsUpdate=true when index_meta has no indexed_at', () => {
|
|
26
|
-
const db = makeDb(null);
|
|
27
|
-
const result = checkUpdate(db, {});
|
|
28
|
-
expect(result.needsUpdate).toBe(true);
|
|
29
|
-
});
|
|
30
|
-
it('returns indexedAt and ageMs in result', () => {
|
|
31
|
-
const now = new Date().toISOString();
|
|
32
|
-
const db = makeDb(now);
|
|
33
|
-
const result = checkUpdate(db, { maxAgeMs: 60_000 });
|
|
34
|
-
expect(result.indexedAt).toBe(now);
|
|
35
|
-
expect(typeof result.ageMs).toBe('number');
|
|
36
|
-
});
|
|
37
|
-
});
|
|
38
|
-
//# sourceMappingURL=check-update.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"check-update.test.js","sourceRoot":"","sources":["../../../../src/__tests__/cli/check-update.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAExD,SAAS,MAAM,CAAC,YAA2B,IAAI;IAC7C,MAAM,EAAE,GAAG,IAAI,QAAQ,CAAC,UAAU,CAAC,CAAC;IACpC,EAAE,CAAC,IAAI,CAAC;;GAEP,CAAC,CAAC;IACH,IAAI,SAAS,EAAE,CAAC;QACd,EAAE,CAAC,OAAO,CAAC,iDAAiD,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAC/E,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;IAC3B,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;QACzD,MAAM,EAAE,GAAG,MAAM,CAAC,0BAA0B,CAAC,CAAC;QAC9C,MAAM,MAAM,GAAG,WAAW,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QACnD,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;QACvD,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;QAC5C,MAAM,MAAM,GAAG,WAAW,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;QACrD,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4DAA4D,EAAE,GAAG,EAAE;QACpE,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;QACxB,MAAM,MAAM,GAAG,WAAW,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QACnC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;QAC/C,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACrC,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QACvB,MAAM,MAAM,GAAG,WAAW,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;QACrD,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACnC,MAAM,CAAC,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"hooks-install.test.d.ts","sourceRoot":"","sources":["../../../../src/__tests__/cli/hooks-install.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect, beforeEach, afterEach } from 'vitest';
|
|
2
|
-
import { mkdtempSync, rmSync, mkdirSync, readFileSync, existsSync } from 'fs';
|
|
3
|
-
import { join } from 'path';
|
|
4
|
-
import { tmpdir } from 'os';
|
|
5
|
-
import { installGitHooks, uninstallGitHooks, listInstalledHooks } from '../../cli/hooks-install.js';
|
|
6
|
-
describe('installGitHooks', () => {
|
|
7
|
-
let tmpDir;
|
|
8
|
-
let hooksDir;
|
|
9
|
-
beforeEach(() => {
|
|
10
|
-
tmpDir = mkdtempSync(join(tmpdir(), 'hooks-test-'));
|
|
11
|
-
hooksDir = join(tmpDir, '.git', 'hooks');
|
|
12
|
-
mkdirSync(hooksDir, { recursive: true });
|
|
13
|
-
});
|
|
14
|
-
afterEach(() => {
|
|
15
|
-
rmSync(tmpDir, { recursive: true, force: true });
|
|
16
|
-
});
|
|
17
|
-
it('creates pre-commit hook with monograph build command', () => {
|
|
18
|
-
installGitHooks(tmpDir, ['pre-commit']);
|
|
19
|
-
const hookPath = join(hooksDir, 'pre-commit');
|
|
20
|
-
expect(existsSync(hookPath)).toBe(true);
|
|
21
|
-
const content = readFileSync(hookPath, 'utf8');
|
|
22
|
-
expect(content).toContain('monograph');
|
|
23
|
-
expect(content).toContain('#!/');
|
|
24
|
-
});
|
|
25
|
-
it('creates post-merge hook', () => {
|
|
26
|
-
installGitHooks(tmpDir, ['post-merge']);
|
|
27
|
-
expect(existsSync(join(hooksDir, 'post-merge'))).toBe(true);
|
|
28
|
-
});
|
|
29
|
-
it('creates both hooks when both specified', () => {
|
|
30
|
-
installGitHooks(tmpDir, ['pre-commit', 'post-merge']);
|
|
31
|
-
expect(existsSync(join(hooksDir, 'pre-commit'))).toBe(true);
|
|
32
|
-
expect(existsSync(join(hooksDir, 'post-merge'))).toBe(true);
|
|
33
|
-
});
|
|
34
|
-
it('throws when .git directory does not exist', () => {
|
|
35
|
-
expect(() => installGitHooks('/nonexistent/repo', ['pre-commit'])).toThrow();
|
|
36
|
-
});
|
|
37
|
-
it('lists installed hooks', () => {
|
|
38
|
-
installGitHooks(tmpDir, ['pre-commit']);
|
|
39
|
-
const installed = listInstalledHooks(tmpDir);
|
|
40
|
-
expect(installed).toContain('pre-commit');
|
|
41
|
-
});
|
|
42
|
-
it('uninstalls a hook', () => {
|
|
43
|
-
installGitHooks(tmpDir, ['pre-commit']);
|
|
44
|
-
uninstallGitHooks(tmpDir, ['pre-commit']);
|
|
45
|
-
expect(existsSync(join(hooksDir, 'pre-commit'))).toBe(false);
|
|
46
|
-
});
|
|
47
|
-
});
|
|
48
|
-
//# sourceMappingURL=hooks-install.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"hooks-install.test.js","sourceRoot":"","sources":["../../../../src/__tests__/cli/hooks-install.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"hooks-marker.test.d.ts","sourceRoot":"","sources":["../../../../src/__tests__/cli/hooks-marker.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,115 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Tests for marker-based hook management enhancements.
|
|
3
|
-
* Covers: append-not-overwrite, uninstall-only-marker-block, post-checkout,
|
|
4
|
-
* Husky detection, rebase guards, and per-hook status details.
|
|
5
|
-
*/
|
|
6
|
-
import { describe, it, expect, afterEach } from 'vitest';
|
|
7
|
-
import { mkdtempSync, rmSync, mkdirSync, writeFileSync, readFileSync } from 'fs';
|
|
8
|
-
import { join } from 'path';
|
|
9
|
-
import { tmpdir } from 'os';
|
|
10
|
-
import { installGitHooks, uninstallGitHooks, getHookStatus, HOOK_MARKER_START, } from '../../cli/hooks-install.js';
|
|
11
|
-
function makeRepo() {
|
|
12
|
-
const dir = mkdtempSync(join(tmpdir(), 'mhook-'));
|
|
13
|
-
mkdirSync(join(dir, '.git', 'hooks'), { recursive: true });
|
|
14
|
-
return dir;
|
|
15
|
-
}
|
|
16
|
-
describe('marker-based append (not overwrite)', () => {
|
|
17
|
-
let tmpDir;
|
|
18
|
-
afterEach(() => rmSync(tmpDir, { recursive: true, force: true }));
|
|
19
|
-
it('appends monograph block to existing hook content', () => {
|
|
20
|
-
tmpDir = makeRepo();
|
|
21
|
-
const hookPath = join(tmpDir, '.git', 'hooks', 'pre-commit');
|
|
22
|
-
const existing = '#!/bin/sh\necho "my custom hook"\n';
|
|
23
|
-
writeFileSync(hookPath, existing, 'utf8');
|
|
24
|
-
installGitHooks(tmpDir, ['pre-commit']);
|
|
25
|
-
const content = readFileSync(hookPath, 'utf8');
|
|
26
|
-
expect(content).toContain('my custom hook'); // existing preserved
|
|
27
|
-
expect(content).toContain(HOOK_MARKER_START);
|
|
28
|
-
expect(content).toContain('monograph');
|
|
29
|
-
});
|
|
30
|
-
it('does not duplicate the block on repeated installs', () => {
|
|
31
|
-
tmpDir = makeRepo();
|
|
32
|
-
installGitHooks(tmpDir, ['pre-commit']);
|
|
33
|
-
installGitHooks(tmpDir, ['pre-commit']);
|
|
34
|
-
const content = readFileSync(join(tmpDir, '.git', 'hooks', 'pre-commit'), 'utf8');
|
|
35
|
-
const count = (content.match(new RegExp(HOOK_MARKER_START, 'g')) ?? []).length;
|
|
36
|
-
expect(count).toBe(1);
|
|
37
|
-
});
|
|
38
|
-
});
|
|
39
|
-
describe('marker-based uninstall (only removes block)', () => {
|
|
40
|
-
let tmpDir;
|
|
41
|
-
afterEach(() => rmSync(tmpDir, { recursive: true, force: true }));
|
|
42
|
-
it('removes only the monograph block, leaves rest of hook intact', () => {
|
|
43
|
-
tmpDir = makeRepo();
|
|
44
|
-
const hookPath = join(tmpDir, '.git', 'hooks', 'pre-commit');
|
|
45
|
-
writeFileSync(hookPath, '#!/bin/sh\necho "keep this"\n', 'utf8');
|
|
46
|
-
installGitHooks(tmpDir, ['pre-commit']);
|
|
47
|
-
uninstallGitHooks(tmpDir, ['pre-commit']);
|
|
48
|
-
const content = readFileSync(hookPath, 'utf8');
|
|
49
|
-
expect(content).toContain('keep this');
|
|
50
|
-
expect(content).not.toContain(HOOK_MARKER_START);
|
|
51
|
-
expect(content).not.toContain('monograph build');
|
|
52
|
-
});
|
|
53
|
-
it('deletes the file if it was created entirely by monograph (no prior content)', () => {
|
|
54
|
-
tmpDir = makeRepo();
|
|
55
|
-
installGitHooks(tmpDir, ['pre-commit']);
|
|
56
|
-
uninstallGitHooks(tmpDir, ['pre-commit']);
|
|
57
|
-
// file should no longer contain the marker block
|
|
58
|
-
const hookPath = join(tmpDir, '.git', 'hooks', 'pre-commit');
|
|
59
|
-
try {
|
|
60
|
-
const content = readFileSync(hookPath, 'utf8');
|
|
61
|
-
expect(content).not.toContain(HOOK_MARKER_START);
|
|
62
|
-
}
|
|
63
|
-
catch {
|
|
64
|
-
// file deleted entirely is also acceptable
|
|
65
|
-
}
|
|
66
|
-
});
|
|
67
|
-
});
|
|
68
|
-
describe('post-checkout hook support', () => {
|
|
69
|
-
let tmpDir;
|
|
70
|
-
afterEach(() => rmSync(tmpDir, { recursive: true, force: true }));
|
|
71
|
-
it('installs post-checkout hook', () => {
|
|
72
|
-
tmpDir = makeRepo();
|
|
73
|
-
installGitHooks(tmpDir, ['post-checkout']);
|
|
74
|
-
const content = readFileSync(join(tmpDir, '.git', 'hooks', 'post-checkout'), 'utf8');
|
|
75
|
-
expect(content).toContain('monograph');
|
|
76
|
-
});
|
|
77
|
-
it('post-checkout hook includes rebase/merge skip guard', () => {
|
|
78
|
-
tmpDir = makeRepo();
|
|
79
|
-
installGitHooks(tmpDir, ['post-checkout']);
|
|
80
|
-
const content = readFileSync(join(tmpDir, '.git', 'hooks', 'post-checkout'), 'utf8');
|
|
81
|
-
// Should skip during rebase or merge operations
|
|
82
|
-
expect(content).toMatch(/rebase|MERGE|cherry-pick/i);
|
|
83
|
-
});
|
|
84
|
-
});
|
|
85
|
-
describe('rebase guard in hook scripts', () => {
|
|
86
|
-
let tmpDir;
|
|
87
|
-
afterEach(() => rmSync(tmpDir, { recursive: true, force: true }));
|
|
88
|
-
it('pre-commit hook includes rebase skip guard', () => {
|
|
89
|
-
tmpDir = makeRepo();
|
|
90
|
-
installGitHooks(tmpDir, ['pre-commit']);
|
|
91
|
-
const content = readFileSync(join(tmpDir, '.git', 'hooks', 'pre-commit'), 'utf8');
|
|
92
|
-
expect(content).toMatch(/rebase|MERGE|cherry-pick/i);
|
|
93
|
-
});
|
|
94
|
-
});
|
|
95
|
-
describe('per-hook status (getHookStatus with details)', () => {
|
|
96
|
-
let tmpDir;
|
|
97
|
-
afterEach(() => rmSync(tmpDir, { recursive: true, force: true }));
|
|
98
|
-
it('returns per-hook detail objects', () => {
|
|
99
|
-
tmpDir = makeRepo();
|
|
100
|
-
installGitHooks(tmpDir, ['pre-commit', 'post-checkout']);
|
|
101
|
-
const status = getHookStatus(tmpDir);
|
|
102
|
-
expect(status.perHook).toBeDefined();
|
|
103
|
-
const preCommit = status.perHook['pre-commit'];
|
|
104
|
-
expect(preCommit).toBeDefined();
|
|
105
|
-
expect(preCommit.installed).toBe(true);
|
|
106
|
-
});
|
|
107
|
-
it('perHook shows not-installed for hooks that were not set up', () => {
|
|
108
|
-
tmpDir = makeRepo();
|
|
109
|
-
installGitHooks(tmpDir, ['pre-commit']);
|
|
110
|
-
const status = getHookStatus(tmpDir);
|
|
111
|
-
const postMerge = status.perHook?.['post-merge'];
|
|
112
|
-
expect(postMerge?.installed ?? false).toBe(false);
|
|
113
|
-
});
|
|
114
|
-
});
|
|
115
|
-
//# sourceMappingURL=hooks-marker.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"hooks-marker.test.js","sourceRoot":"","sources":["../../../../src/__tests__/cli/hooks-marker.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAc,SAAS,EAAE,MAAM,QAAQ,CAAC;AACrE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AACjF,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,MAAM,EAAE,MAAM,IAAI,CAAC;AAC5B,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,aAAa,EACb,iBAAiB,GAGlB,MAAM,4BAA4B,CAAC;AAEpC,SAAS,QAAQ;IACf,MAAM,GAAG,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC;IAClD,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3D,OAAO,GAAG,CAAC;AACb,CAAC;AAED,QAAQ,CAAC,qCAAqC,EAAE,GAAG,EAAE;IACnD,IAAI,MAAc,CAAC;IACnB,SAAS,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAElE,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;QAC1D,MAAM,GAAG,QAAQ,EAAE,CAAC;QACpB,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC;QAC7D,MAAM,QAAQ,GAAG,oCAAoC,CAAC;QACtD,aAAa,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;QAE1C,eAAe,CAAC,MAAM,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC;QACxC,MAAM,OAAO,GAAG,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAC/C,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC,CAAC,qBAAqB;QAClE,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;QAC7C,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;QAC3D,MAAM,GAAG,QAAQ,EAAE,CAAC;QACpB,eAAe,CAAC,MAAM,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC;QACxC,eAAe,CAAC,MAAM,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC;QACxC,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,CAAC,EAAE,MAAM,CAAC,CAAC;QAClF,MAAM,KAAK,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,iBAAiB,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;QAC/E,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACxB,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,6CAA6C,EAAE,GAAG,EAAE;IAC3D,IAAI,MAAc,CAAC;IACnB,SAAS,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAElE,EAAE,CAAC,8DAA8D,EAAE,GAAG,EAAE;QACtE,MAAM,GAAG,QAAQ,EAAE,CAAC;QACpB,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC;QAC7D,aAAa,CAAC,QAAQ,EAAE,+BAA+B,EAAE,MAAM,CAAC,CAAC;QAEjE,eAAe,CAAC,MAAM,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC;QACxC,iBAAiB,CAAC,MAAM,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC;QAE1C,MAAM,OAAO,GAAG,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAC/C,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;QACvC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;QACjD,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6EAA6E,EAAE,GAAG,EAAE;QACrF,MAAM,GAAG,QAAQ,EAAE,CAAC;QACpB,eAAe,CAAC,MAAM,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC;QACxC,iBAAiB,CAAC,MAAM,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC;QAC1C,iDAAiD;QACjD,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC;QAC7D,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YAC/C,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;QACnD,CAAC;QAAC,MAAM,CAAC;YACP,2CAA2C;QAC7C,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,4BAA4B,EAAE,GAAG,EAAE;IAC1C,IAAI,MAAc,CAAC;IACnB,SAAS,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAElE,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;QACrC,MAAM,GAAG,QAAQ,EAAE,CAAC;QACpB,eAAe,CAAC,MAAM,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC;QAC3C,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,CAAC,EAAE,MAAM,CAAC,CAAC;QACrF,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qDAAqD,EAAE,GAAG,EAAE;QAC7D,MAAM,GAAG,QAAQ,EAAE,CAAC;QACpB,eAAe,CAAC,MAAM,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC;QAC3C,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,CAAC,EAAE,MAAM,CAAC,CAAC;QACrF,gDAAgD;QAChD,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,2BAA2B,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,8BAA8B,EAAE,GAAG,EAAE;IAC5C,IAAI,MAAc,CAAC;IACnB,SAAS,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAElE,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QACpD,MAAM,GAAG,QAAQ,EAAE,CAAC;QACpB,eAAe,CAAC,MAAM,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC;QACxC,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,CAAC,EAAE,MAAM,CAAC,CAAC;QAClF,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,2BAA2B,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,8CAA8C,EAAE,GAAG,EAAE;IAC5D,IAAI,MAAc,CAAC;IACnB,SAAS,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAElE,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;QACzC,MAAM,GAAG,QAAQ,EAAE,CAAC;QACpB,eAAe,CAAC,MAAM,EAAE,CAAC,YAAY,EAAE,eAAe,CAAC,CAAC,CAAC;QACzD,MAAM,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;QACrC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;QACrC,MAAM,SAAS,GAAG,MAAM,CAAC,OAAQ,CAAC,YAAY,CAAC,CAAC;QAChD,MAAM,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,CAAC;QAChC,MAAM,CAAE,SAA2B,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4DAA4D,EAAE,GAAG,EAAE;QACpE,MAAM,GAAG,QAAQ,EAAE,CAAC;QACpB,eAAe,CAAC,MAAM,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC;QACxC,MAAM,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;QACrC,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC,YAAY,CAAC,CAAC;QACjD,MAAM,CAAC,SAAS,EAAE,SAAS,IAAI,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"hooks-status.test.d.ts","sourceRoot":"","sources":["../../../../src/__tests__/cli/hooks-status.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect, beforeEach, afterEach } from 'vitest';
|
|
2
|
-
import { mkdtempSync, rmSync, mkdirSync } from 'fs';
|
|
3
|
-
import { join } from 'path';
|
|
4
|
-
import { tmpdir } from 'os';
|
|
5
|
-
import { installGitHooks, getHookStatus } from '../../cli/hooks-install.js';
|
|
6
|
-
describe('getHookStatus', () => {
|
|
7
|
-
let tmpDir;
|
|
8
|
-
beforeEach(() => {
|
|
9
|
-
tmpDir = mkdtempSync(join(tmpdir(), 'hook-status-'));
|
|
10
|
-
mkdirSync(join(tmpDir, '.git', 'hooks'), { recursive: true });
|
|
11
|
-
});
|
|
12
|
-
afterEach(() => { rmSync(tmpDir, { recursive: true, force: true }); });
|
|
13
|
-
it('returns installed=false when no hooks present', () => {
|
|
14
|
-
const status = getHookStatus(tmpDir);
|
|
15
|
-
expect(status.installed).toBe(false);
|
|
16
|
-
expect(status.hooks).toEqual([]);
|
|
17
|
-
});
|
|
18
|
-
it('returns installed=true when hooks are present', () => {
|
|
19
|
-
installGitHooks(tmpDir, ['pre-commit', 'post-merge']);
|
|
20
|
-
const status = getHookStatus(tmpDir);
|
|
21
|
-
expect(status.installed).toBe(true);
|
|
22
|
-
expect(status.hooks).toContain('pre-commit');
|
|
23
|
-
expect(status.hooks).toContain('post-merge');
|
|
24
|
-
});
|
|
25
|
-
it('returns hooksDir path', () => {
|
|
26
|
-
const status = getHookStatus(tmpDir);
|
|
27
|
-
expect(status.hooksDir).toContain('.git/hooks');
|
|
28
|
-
});
|
|
29
|
-
it('returns installed=false when .git dir missing', () => {
|
|
30
|
-
const noGitDir = mkdtempSync(join(tmpdir(), 'no-git-'));
|
|
31
|
-
const status = getHookStatus(noGitDir);
|
|
32
|
-
expect(status.installed).toBe(false);
|
|
33
|
-
rmSync(noGitDir, { recursive: true, force: true });
|
|
34
|
-
});
|
|
35
|
-
});
|
|
36
|
-
//# sourceMappingURL=hooks-status.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"hooks-status.test.js","sourceRoot":"","sources":["../../../../src/__tests__/cli/hooks-status.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACrE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AACpD,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,MAAM,EAAE,MAAM,IAAI,CAAC;AAC5B,OAAO,EAAE,eAAe,EAAE,aAAa,EAAmB,MAAM,4BAA4B,CAAC;AAE7F,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC7B,IAAI,MAAc,CAAC;IAEnB,UAAU,CAAC,GAAG,EAAE;QACd,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,cAAc,CAAC,CAAC,CAAC;QACrD,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAEvE,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;QACvD,MAAM,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;QACrC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;QACvD,eAAe,CAAC,MAAM,EAAE,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC,CAAC;QACtD,MAAM,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;QACrC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;QAC7C,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uBAAuB,EAAE,GAAG,EAAE;QAC/B,MAAM,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;QACrC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;QACvD,MAAM,QAAQ,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,SAAS,CAAC,CAAC,CAAC;QACxD,MAAM,MAAM,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;QACvC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrC,MAAM,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"adjacency-matrix.test.d.ts","sourceRoot":"","sources":["../../../../src/__tests__/export/adjacency-matrix.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,103 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect } from 'vitest';
|
|
2
|
-
import { buildAdjacencyMatrix, buildAdjacencyMatrixFromDb, adjacencyMatrixToCsv, } from '../../export/adjacency-matrix.js';
|
|
3
|
-
import { openDb } from '../../storage/db.js';
|
|
4
|
-
import { join } from 'path';
|
|
5
|
-
import { mkdtempSync } from 'fs';
|
|
6
|
-
import { tmpdir } from 'os';
|
|
7
|
-
function makeTempDb() {
|
|
8
|
-
const dir = mkdtempSync(join(tmpdir(), 'monograph-adjmatrix-test-'));
|
|
9
|
-
return openDb(join(dir, 'test.db'));
|
|
10
|
-
}
|
|
11
|
-
function insertNode(db, id) {
|
|
12
|
-
db.prepare(`INSERT INTO nodes (id, label, name, norm_label, is_exported) VALUES (?, 'Function', ?, ?, 0)`)
|
|
13
|
-
.run(id, id, id.toLowerCase());
|
|
14
|
-
}
|
|
15
|
-
function insertEdge(db, src, tgt) {
|
|
16
|
-
db.prepare(`INSERT INTO edges (id, source_id, target_id, relation, confidence, confidence_score) VALUES (?, ?, ?, 'CALLS', 'EXTRACTED', 1.0)`)
|
|
17
|
-
.run(`${src}_${tgt}`, src, tgt);
|
|
18
|
-
}
|
|
19
|
-
function makeNode(id) {
|
|
20
|
-
return { id, label: 'Function', name: id, normLabel: id.toLowerCase(), isExported: false };
|
|
21
|
-
}
|
|
22
|
-
function makeEdge(src, tgt) {
|
|
23
|
-
return { id: `${src}_${tgt}`, sourceId: src, targetId: tgt, relation: 'CALLS', confidence: 'EXTRACTED', confidenceScore: 1.0 };
|
|
24
|
-
}
|
|
25
|
-
describe('buildAdjacencyMatrix', () => {
|
|
26
|
-
it('builds a zero matrix for no edges', () => {
|
|
27
|
-
const nodes = [makeNode('a'), makeNode('b')];
|
|
28
|
-
const result = buildAdjacencyMatrix(nodes, []);
|
|
29
|
-
expect(result.nodeIds).toEqual(['a', 'b']);
|
|
30
|
-
expect(result.matrix[0]).toEqual([0, 0]);
|
|
31
|
-
expect(result.matrix[1]).toEqual([0, 0]);
|
|
32
|
-
});
|
|
33
|
-
it('counts a single edge correctly', () => {
|
|
34
|
-
const nodes = [makeNode('a'), makeNode('b'), makeNode('c')];
|
|
35
|
-
const edges = [makeEdge('a', 'b')];
|
|
36
|
-
const result = buildAdjacencyMatrix(nodes, edges);
|
|
37
|
-
// a→b: matrix[0][1] = 1, all others = 0
|
|
38
|
-
expect(result.matrix[0][1]).toBe(1);
|
|
39
|
-
expect(result.matrix[0][0]).toBe(0);
|
|
40
|
-
expect(result.matrix[1][0]).toBe(0);
|
|
41
|
-
});
|
|
42
|
-
it('counts multi-edges between the same pair', () => {
|
|
43
|
-
const nodes = [makeNode('a'), makeNode('b')];
|
|
44
|
-
const e1 = { ...makeEdge('a', 'b'), id: 'e1' };
|
|
45
|
-
const e2 = { ...makeEdge('a', 'b'), id: 'e2' };
|
|
46
|
-
const result = buildAdjacencyMatrix(nodes, [e1, e2]);
|
|
47
|
-
expect(result.matrix[0][1]).toBe(2);
|
|
48
|
-
});
|
|
49
|
-
it('ignores edges whose endpoints are not in the node list', () => {
|
|
50
|
-
const nodes = [makeNode('a'), makeNode('b')];
|
|
51
|
-
const dangling = makeEdge('a', 'z'); // 'z' not in nodes
|
|
52
|
-
const result = buildAdjacencyMatrix(nodes, [dangling]);
|
|
53
|
-
expect(result.matrix[0][0]).toBe(0);
|
|
54
|
-
expect(result.matrix[0][1]).toBe(0);
|
|
55
|
-
});
|
|
56
|
-
});
|
|
57
|
-
describe('buildAdjacencyMatrixFromDb', () => {
|
|
58
|
-
it('builds matrix from all nodes in db', () => {
|
|
59
|
-
const db = makeTempDb();
|
|
60
|
-
insertNode(db, 'a');
|
|
61
|
-
insertNode(db, 'b');
|
|
62
|
-
insertNode(db, 'c');
|
|
63
|
-
insertEdge(db, 'a', 'b');
|
|
64
|
-
insertEdge(db, 'b', 'c');
|
|
65
|
-
const result = buildAdjacencyMatrixFromDb(db);
|
|
66
|
-
expect(result.nodeIds).toHaveLength(3);
|
|
67
|
-
// Find indices
|
|
68
|
-
const ai = result.nodeIds.indexOf('a');
|
|
69
|
-
const bi = result.nodeIds.indexOf('b');
|
|
70
|
-
expect(result.matrix[ai][bi]).toBe(1);
|
|
71
|
-
db.close();
|
|
72
|
-
});
|
|
73
|
-
it('restricts to given nodeIds subset', () => {
|
|
74
|
-
const db = makeTempDb();
|
|
75
|
-
insertNode(db, 'a');
|
|
76
|
-
insertNode(db, 'b');
|
|
77
|
-
insertNode(db, 'c');
|
|
78
|
-
insertEdge(db, 'a', 'b');
|
|
79
|
-
const result = buildAdjacencyMatrixFromDb(db, ['a', 'b']);
|
|
80
|
-
expect(result.nodeIds).toHaveLength(2);
|
|
81
|
-
expect(result.nodeIds).not.toContain('c');
|
|
82
|
-
db.close();
|
|
83
|
-
});
|
|
84
|
-
});
|
|
85
|
-
describe('adjacencyMatrixToCsv', () => {
|
|
86
|
-
it('generates a CSV with node names as headers', () => {
|
|
87
|
-
const am = buildAdjacencyMatrix([makeNode('a'), makeNode('b')], [makeEdge('a', 'b')]);
|
|
88
|
-
const csv = adjacencyMatrixToCsv(am);
|
|
89
|
-
const lines = csv.split('\n');
|
|
90
|
-
expect(lines[0]).toContain('"a"');
|
|
91
|
-
expect(lines[0]).toContain('"b"');
|
|
92
|
-
// Row for 'a': first cell is "a", second is 1
|
|
93
|
-
const aRow = lines.find(l => l.startsWith('"a"'));
|
|
94
|
-
expect(aRow).toContain('1');
|
|
95
|
-
});
|
|
96
|
-
it('escapes double quotes in node names', () => {
|
|
97
|
-
const node = { id: 'x', label: 'Function', name: 'say "hello"', normLabel: 'say hello', isExported: false };
|
|
98
|
-
const am = buildAdjacencyMatrix([node], []);
|
|
99
|
-
const csv = adjacencyMatrixToCsv(am);
|
|
100
|
-
expect(csv).toContain('""hello""');
|
|
101
|
-
});
|
|
102
|
-
});
|
|
103
|
-
//# sourceMappingURL=adjacency-matrix.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"adjacency-matrix.test.js","sourceRoot":"","sources":["../../../../src/__tests__/export/adjacency-matrix.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"csv.test.d.ts","sourceRoot":"","sources":["../../../../src/__tests__/export/csv.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect } from 'vitest';
|
|
2
|
-
import { toCsv } from '../../export/csv.js';
|
|
3
|
-
const node = {
|
|
4
|
-
id: 'n1', label: 'Function', name: 'doStuff',
|
|
5
|
-
normLabel: 'function', filePath: '/a.ts',
|
|
6
|
-
startLine: 1, endLine: 5, isExported: true,
|
|
7
|
-
};
|
|
8
|
-
const edge = {
|
|
9
|
-
id: 'e1', sourceId: 'n1', targetId: 'n2',
|
|
10
|
-
relation: 'CALLS', confidence: 'EXTRACTED', confidenceScore: 0.9,
|
|
11
|
-
};
|
|
12
|
-
describe('toCsv', () => {
|
|
13
|
-
it('emits node CSV header and row', () => {
|
|
14
|
-
const { nodes } = toCsv([node], []);
|
|
15
|
-
expect(nodes).toContain('id,label,name,filePath,isExported,startLine,endLine');
|
|
16
|
-
expect(nodes).toContain('n1,Function,doStuff,/a.ts,true,1,5');
|
|
17
|
-
});
|
|
18
|
-
it('emits edge CSV header and row', () => {
|
|
19
|
-
const { edges } = toCsv([node], [edge]);
|
|
20
|
-
expect(edges).toContain('id,sourceId,targetId,relation,confidence,confidenceScore');
|
|
21
|
-
expect(edges).toContain('e1,n1,n2,CALLS,EXTRACTED,0.9');
|
|
22
|
-
});
|
|
23
|
-
it('escapes commas in names', () => {
|
|
24
|
-
const n = { ...node, name: 'foo,bar' };
|
|
25
|
-
const { nodes } = toCsv([n], []);
|
|
26
|
-
expect(nodes).toContain('"foo,bar"');
|
|
27
|
-
});
|
|
28
|
-
it('returns two separate CSV strings', () => {
|
|
29
|
-
const result = toCsv([node], [edge]);
|
|
30
|
-
expect(typeof result.nodes).toBe('string');
|
|
31
|
-
expect(typeof result.edges).toBe('string');
|
|
32
|
-
});
|
|
33
|
-
});
|
|
34
|
-
//# sourceMappingURL=csv.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"csv.test.js","sourceRoot":"","sources":["../../../../src/__tests__/export/csv.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAG5C,MAAM,IAAI,GAAkB;IAC1B,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS;IAC5C,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO;IACxC,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,UAAU,EAAE,IAAI;CAC3C,CAAC;AACF,MAAM,IAAI,GAAkB;IAC1B,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI;IACxC,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,eAAe,EAAE,GAAG;CACjE,CAAC;AAEF,QAAQ,CAAC,OAAO,EAAE,GAAG,EAAE;IACrB,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;QACvC,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;QACpC,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,qDAAqD,CAAC,CAAC;QAC/E,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,oCAAoC,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;QACvC,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;QACxC,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,0DAA0D,CAAC,CAAC;QACpF,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,8BAA8B,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yBAAyB,EAAE,GAAG,EAAE;QACjC,MAAM,CAAC,GAAG,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;QACvC,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACjC,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;QAC1C,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;QACrC,MAAM,CAAC,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC3C,MAAM,CAAC,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"dot.test.d.ts","sourceRoot":"","sources":["../../../../src/__tests__/export/dot.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect } from 'vitest';
|
|
2
|
-
import { toDot } from '../../export/dot.js';
|
|
3
|
-
function makeNode(id, label = 'Function', name = id, filePath) {
|
|
4
|
-
return { id, label: label, name, isExported: false, filePath };
|
|
5
|
-
}
|
|
6
|
-
function makeEdge(id, sourceId, targetId, relation = 'CALLS') {
|
|
7
|
-
return { id, sourceId, targetId, relation, confidence: 'EXTRACTED', confidenceScore: 1.0 };
|
|
8
|
-
}
|
|
9
|
-
describe('toDot', () => {
|
|
10
|
-
it('returns a string starting with "digraph"', () => {
|
|
11
|
-
const result = toDot([], []);
|
|
12
|
-
expect(typeof result).toBe('string');
|
|
13
|
-
expect(result.trim()).toMatch(/^digraph/);
|
|
14
|
-
});
|
|
15
|
-
it('produces valid DOT structure with braces', () => {
|
|
16
|
-
const result = toDot([], []);
|
|
17
|
-
expect(result).toContain('{');
|
|
18
|
-
expect(result).toContain('}');
|
|
19
|
-
});
|
|
20
|
-
it('includes node ids in output', () => {
|
|
21
|
-
const nodes = [makeNode('node_a'), makeNode('node_b')];
|
|
22
|
-
const result = toDot(nodes, []);
|
|
23
|
-
expect(result).toContain('node_a');
|
|
24
|
-
expect(result).toContain('node_b');
|
|
25
|
-
});
|
|
26
|
-
it('includes edge arrows', () => {
|
|
27
|
-
const nodes = [makeNode('a'), makeNode('b')];
|
|
28
|
-
const edges = [makeEdge('e1', 'a', 'b')];
|
|
29
|
-
const result = toDot(nodes, edges);
|
|
30
|
-
expect(result).toContain('->');
|
|
31
|
-
expect(result).toContain('"a"');
|
|
32
|
-
expect(result).toContain('"b"');
|
|
33
|
-
});
|
|
34
|
-
it('escapes special characters in node names', () => {
|
|
35
|
-
const nodes = [makeNode('id1', 'Function', 'my "func"')];
|
|
36
|
-
const result = toDot(nodes, []);
|
|
37
|
-
// The quoted name should be escaped
|
|
38
|
-
expect(result).toContain('id1');
|
|
39
|
-
});
|
|
40
|
-
it('includes label attribute on nodes', () => {
|
|
41
|
-
const nodes = [makeNode('fn1', 'Function', 'myFunction')];
|
|
42
|
-
const result = toDot(nodes, []);
|
|
43
|
-
expect(result).toContain('label');
|
|
44
|
-
expect(result).toContain('myFunction');
|
|
45
|
-
});
|
|
46
|
-
it('includes relation as edge label', () => {
|
|
47
|
-
const nodes = [makeNode('a'), makeNode('b')];
|
|
48
|
-
const edges = [makeEdge('e1', 'a', 'b', 'IMPORTS')];
|
|
49
|
-
const result = toDot(nodes, edges);
|
|
50
|
-
expect(result).toContain('IMPORTS');
|
|
51
|
-
});
|
|
52
|
-
it('handles empty nodes and edges', () => {
|
|
53
|
-
const result = toDot([], []);
|
|
54
|
-
expect(result).toBeTruthy();
|
|
55
|
-
expect(result).toContain('digraph');
|
|
56
|
-
});
|
|
57
|
-
it('accepts an optional graph name', () => {
|
|
58
|
-
const result = toDot([], [], { graphName: 'MyGraph' });
|
|
59
|
-
expect(result).toContain('MyGraph');
|
|
60
|
-
});
|
|
61
|
-
it('uses "monograph" as default graph name', () => {
|
|
62
|
-
const result = toDot([], []);
|
|
63
|
-
expect(result).toContain('monograph');
|
|
64
|
-
});
|
|
65
|
-
it('produces parseable DOT for multiple nodes and edges', () => {
|
|
66
|
-
const nodes = [makeNode('a'), makeNode('b'), makeNode('c')];
|
|
67
|
-
const edges = [makeEdge('e1', 'a', 'b'), makeEdge('e2', 'b', 'c')];
|
|
68
|
-
const result = toDot(nodes, edges);
|
|
69
|
-
expect(result).toContain('"a" ->');
|
|
70
|
-
expect(result).toContain('"b" ->');
|
|
71
|
-
});
|
|
72
|
-
});
|
|
73
|
-
//# sourceMappingURL=dot.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"dot.test.js","sourceRoot":"","sources":["../../../../src/__tests__/export/dot.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"gexf.test.d.ts","sourceRoot":"","sources":["../../../../src/__tests__/export/gexf.test.ts"],"names":[],"mappings":""}
|